1

I'm getting crashes trying to run my code in older android versions, but it works great on newer ones.

This is the log I get.

09-19 08:10:46.741 6803-6803/? I/art: Not late-enabling -Xcheck:jni (already on)
09-19 08:10:46.792 6803-6803/com.example.rjrod.legendchat W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
09-19 08:10:46.932 6803-6823/com.example.rjrod.legendchat D/OpenGLRenderer: Render dirty regions requested: true
09-19 08:10:46.941 6803-6803/com.example.rjrod.legendchat D/Atlas: Validating map...
09-19 08:10:46.964 6803-6823/com.example.rjrod.legendchat I/OpenGLRenderer: Initialized EGL, version 1.4
09-19 08:10:46.964 6803-6823/com.example.rjrod.legendchat W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
09-19 08:10:47.025 6803-6823/com.example.rjrod.legendchat D/EGL_emulation: eglCreateContext: 0x7f4e07a13200: maj 2 min 0 rcv 2
09-19 08:10:47.035 6803-6823/com.example.rjrod.legendchat D/EGL_emulation: eglMakeCurrent: 0x7f4e07a13200: ver 2 0
09-19 08:10:47.043 6803-6823/com.example.rjrod.legendchat D/OpenGLRenderer: Enabling debug mode 0
09-19 08:10:47.123 6803-6823/com.example.rjrod.legendchat D/EGL_emulation: eglMakeCurrent: 0x7f4e07a13200: ver 2 0
09-19 08:10:47.188 6803-6803/com.example.rjrod.legendchat D/MensagemAdapter: getView: 18
09-19 08:10:47.188 6803-6803/com.example.rjrod.legendchat D/Num: getView: 1 98
09-19 08:10:47.229 6803-6803/com.example.rjrod.legendchat D/MensagemAdapter: getView: 17
09-19 08:10:47.229 6803-6803/com.example.rjrod.legendchat D/Num: getView: 4 97
09-19 08:10:47.233 6803-6803/com.example.rjrod.legendchat W/ResourceType: Failure getting entry for 0x7f070056 (t=6 e=86) (error -75)
    Failure getting entry for 0x7f070056 (t=6 e=86) (error -75)
09-19 08:10:47.233 6803-6803/com.example.rjrod.legendchat D/AndroidRuntime: Shutting down VM
09-19 08:10:47.233 6803-6803/com.example.rjrod.legendchat E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.rjrod.legendchat, PID: 6803
    android.view.InflateException: Binary XML file line #66: Error inflating class ImageView
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
        at com.example.rjrod.legendchat.adapter.MensagemAdapter.getView(MensagemAdapter.java:86)
        at android.widget.AbsListView.obtainView(AbsListView.java:2344)
        at android.widget.ListView.makeAndAddView(ListView.java:1864)
        at android.widget.ListView.fillUp(ListView.java:732)
        at android.widget.ListView.layoutChildren(ListView.java:1677)
        at android.widget.AbsListView.onLayout(AbsListView.java:2148)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)

    ....

Here is my code for the retrofit.

this the code for the api API

public interface LegendAPI {

    String BASE_URL = "https://private-96848-7egend.apiary-mock.com/";

    @Headers("Content-Type: Application/json")
    @GET("conversation")
    Call<Feed> getStuff();
}

Main

call.enqueue(new Callback<Feed>() {
                @Override
                public void onResponse(Call<Feed> call, Response<Feed> response) {
                    Log.d(TAG, "onResponse: Server Response: " + response.toString());
                    //Log.d(TAG, "onResponse: Received information " + response.body().toString());

                    messagesList = response.body().getMessages();
                    usersList = response.body().getUser();
                    adapter = new MensagemAdapter(MainActivity.this, messagesList.subList(messagesList.size()-20,messagesList.size()-1),usersList);
                    for (int i = 0; i < messagesList.size(); i++) {
                        Message message = messagesList.get(i);
                        attachments = message.getAttachments();
                        if (i == messagesList.size()-1){

                            saveInfo();
                            Log.d(TAG, "loadInfo: " + usersList);
                        }
...

and the error sends me to here.

else {
                    assert inflater != null;
                    **view = inflater.inflate(R.layout.left_no_attach, parent, false);**

Thanks in advance. If you need anything else to help me feel free to ask.

ADDED Layout code Layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageViewA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@+id/tv_mensage"
        app:layout_constraintTop_toBottomOf="@+id/tv_mensage"
        app:srcCompat="@mipmap/ic_launcher" />

    <ImageView
        android:id="@+id/imageViewB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@+id/imageViewA"
        app:layout_constraintTop_toBottomOf="@+id/imageViewA"
        app:srcCompat="@mipmap/ic_launcher" />

    <ImageView
        android:id="@+id/imageViewC"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@+id/imageViewB"
        app:layout_constraintTop_toBottomOf="@+id/imageViewB"
        app:srcCompat="@mipmap/ic_launcher" />

    <ImageView
        android:id="@+id/avatarIm"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/tv_mensage"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/nomeId"
        app:srcCompat="@drawable/ic_launcher_foreground" />

    <ImageView
        android:id="@+id/imageViewD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@+id/imageViewC"
        app:layout_constraintTop_toBottomOf="@+id/imageViewC"
        app:layout_goneMarginBottom="15dp"
        app:srcCompat="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/nomeId"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignStart="@+id/tv_mensage"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="16dp"
        android:fontFamily="@font/roboto_bold"
        android:text="TextView"
        android:textAlignment="viewStart"
        android:textColor="@android:color/white"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/tv_mensage"
        app:layout_constraintStart_toStartOf="@+id/tv_mensage"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_mensage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginStart="16dp"
        android:layout_marginTop="32dp"
        android:layout_toEndOf="@+id/avatarIm"
        android:background="@drawable/roundwhite"
        android:fontFamily="@font/roboto"
        android:maxWidth="500dp"
        android:padding="8dp"
        android:text="Menasagem"
        android:textAlignment="viewStart"
        android:textColor="@android:color/black"
        app:layout_constraintStart_toEndOf="@+id/avatarIm"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

ADAPTER

public class MensagemAdapter extends ArrayAdapter {

private Context context;
private List<Message> messages;
private List<Users> users;
private static final String TAG = "MensagemAdapter";


public MensagemAdapter(@NonNull Context context, @NonNull List<Message> objects, @NonNull List<Users> users) {
    super(context, 0, objects);
    this.context=context;
    this.messages = objects;
    this.users = users;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View view = null;
    Log.d(TAG, "getView: " + position);


        if (messages != null) {

            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            Message message = messages.get(position);
            Log.d("Num", "getView: " + message.getUserId() + " " + message.getId());
            if (message.getUserId() == 1) {
                assert inflater != null;
                view = inflater.inflate(R.layout.right_no_attach, parent, false);
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);
                textoMensagem.setText(message.getContent());
                if (message.getAttachments() != null) {

                    for (int i = 0; i < message.getAttachments().size(); i++) {
                        //view = inflater.inflate(R.layout.right_attach,parent,false);
                        if (i == 0) {
                            ImageView attach = view.findViewById(R.id.imageView1);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);

                        } else if (i == 1) {
                            ImageView attach = view.findViewById(R.id.imageView2);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else if (i == 2) {
                            ImageView attach = view.findViewById(R.id.imageView3);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else {
                            ImageView attach = view.findViewById(R.id.imageView3);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        }

                    }
                }

            } else {
                assert inflater != null;
                view = inflater.inflate(R.layout.left_no_attach, parent, false);
                TextView nomeMensagem = view.findViewById(R.id.nomeId);
                nomeMensagem.setText(users.get(message.getUserId() - 1).getName());
                ImageView avatar = view.findViewById(R.id.avatarIm);
                Picasso.get().load(users.get(message.getUserId() - 1).getAvatarId()).transform(new CircleTransform()).into(avatar);
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);
                textoMensagem.setText(message.getContent());
                if (message.getAttachments() != null) {

                    for (int i = 0; i < message.getAttachments().size(); i++) {
                        //view = inflater.inflate(R.layout.right_attach,parent,false);
                        if (i == 0) {
                            ImageView attach = view.findViewById(R.id.imageViewA);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);

                        } else if (i == 1) {
                            ImageView attach = view.findViewById(R.id.imageViewB);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else if (i == 2) {
                            ImageView attach = view.findViewById(R.id.imageViewC);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        } else {
                            ImageView attach = view.findViewById(R.id.imageViewD);
                            attach.setVisibility(View.VISIBLE);
                            Picasso.get().load(message.getAttachments().get(i).getThumbnailUrl()).into(attach);
                        }

                    }
                }

            }


            if (message.getAttachments() == null) {
                TextView textoMensagem = view.findViewById(R.id.tv_mensage);

                textoMensagem.setText(message.getContent());
            }



    }
    return view;
    }



}
Mark Adler
  • 101,978
  • 13
  • 118
  • 158

2 Answers2

2

In your error logs, I think it's not because of retrofit2.

InflateException: Binary XML file line #66: Error inflating class ImageView

Are you using vector images in this layout file ?? If you do, make sure you're already have this line in your gradle, Because API 19 or lower do not supported vector image, so you should enable vectorDrawables:

    vectorDrawables.useSupportLibrary = true

And also this in your BaseActitivy or in any Activity you're using vector images:

static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }

Good luck

Stevie
  • 401
  • 4
  • 13
0

Inside your app gradle:

defaultConfig {
    ...
    vectorDrawables.useSupportLibrary = true
}

Inside your application

override fun onCreate() {
    super.onCreate()
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
    ...
}

And inside layout - use AppCompatImageView (with app:srcCompat attribute) instead of ImageView