4
respostas

Depois de criado o adapter o app não executa mais aula 5 constraints layout

2020-03-03 16:27:05.730 6930-6930/br.com.inprint.inprintviagens E/AndroidRuntime: FATAL EXCEPTION: main Process: br.com.inprint.inprintviagens, PID: 6930 android.view.InflateException: Binary XML file line #45: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at br.com.inprint.inprintviagens.ui.adapter.ListaPacotesAdapter.getView(ListaPacotesAdapter.java:42) at android.widget.AbsListView.obtainView(AbsListView.java:2365) at android.widget.ListView.makeAndAddView(ListView.java:2052) at android.widget.ListView.fillDown(ListView.java:786) at android.widget.ListView.fillFromTop(ListView.java:847) at android.widget.ListView.layoutChildren(ListView.java:1826) at android.widget.AbsListView.onLayout(AbsListView.java:2164) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:446) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) at android.widget.LinearLayout.onLayout(LinearLayout.java:1544) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:761) at android.view.View.layout(View.java:19659) at android.view.ViewGroup.layout(ViewGroup.java:6075) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2496) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2212) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) at android.view.Choreographer.doCallbacks(Choreographer.java:723) at android.view.Choreographer.doFrame(Choreographer.java:658) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) 2020-03-03 16:27:05.731 6930-6930/br.com.inprint.inprintviagens E/AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

4 respostas

O problema ta sendo na hora de inflar o layout, poderia postar o teu adapter ?

Boa tarde Victor, muito obrigado pelo apoio, tentei muitas coisas e não consegui fazer funcionar até agora, até reduzi a versão de meu android studio para a 3.4.2 e também não foi, então mudei para a mais nova (3.6) e também não foi, voltei então para a versão que estou acostumado a usar (3.5.3).

Segue abaixo o código de meu adapter

package br.com.inprint.inprintviagens.ui.adapter;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import br.com.inprint.inprintviagens.R;
import br.com.inprint.inprintviagens.model.Pacote;

public class ListaPacotesAdapter extends BaseAdapter {

    private final List<Pacote> pacotes;
    private Context context;

    public ListaPacotesAdapter (List<Pacote> pacotes, Context context) {
        this.pacotes = pacotes;
        this.context = context;
    }

    @Override
    public int getCount() {
        return pacotes.size();
    }

    @Override
    public Pacote getItem(int posicao) {
        return pacotes.get(posicao);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int posicao, View view, ViewGroup parent) {
        View viewCriada = LayoutInflater.from(context).
                inflate(R.layout.item_pacote, parent, false);

        Pacote pacote = pacotes.get(posicao);

        TextView local = viewCriada.findViewById(R.id.item_pacote_local);
        local.setText(pacote.getLocal());

        ImageView imagem = viewCriada.findViewById(R.id.item_pacote_imagem);
        Resources resources = context.getResources();
        int idDoDrawable = resources.getIdentifier(pacote.getImagem(), "drawable", context.getPackageName());
        Drawable drawableImagemPacote = resources.getDrawable(idDoDrawable);
        imagem.setImageDrawable(drawableImagemPacote);

        TextView dias = viewCriada.findViewById(R.id.item_pacote_dias);
        dias.setText(pacote.getDias() + "dias");

        TextView preco = viewCriada.findViewById(R.id.item_pacote_preco);
        preco.setText(pacote.getPreco().toString());

        return viewCriada;
    }
}

Bom acabei fazendo uns testes com o seu Adapter e funciona perfeitamente ao qual consegui abrir o projeto do curso. Neste caso o erro vem de fora, talvez no XML, então dei uma olhada e testei algumas coisas que poderiam dar esse tipo de erro, algumas delas podem ser:

1 - Talvez o seu Projeto esteja configurado como AndroidX por padrão, ao se criar um projeto atualmente ele já vem marcado, então o motivo dele pode ser que ao criar uma View no XML ela deva ser do tipo

<androidx.constraintlayout.widget.ConstraintLayout/>

e não do tipo

<android.support.constraint.ConstraintLayout/>

Notei que no curso, o professor não faz do uso do AndroidX, neste caso a segunda opção faria sentindo. Da uma checada na dependência também, não só no constraintlayout mas também nas demais que tu faz uso, cardview por exemplo.

AndroidX : implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

Android : implementation 'com.android.support.constraint:constraint-layout:1.1.3'

2 - A segunda coisa que poderia ser, poderia talvez uma escrita errada ao se criar uma view, mas acho menos provavél, mas não custa procurar.

Erros do tipo <view /> ao invés de <View />

Vitor, muito obrigado pelo apoio!

Ainda não testei os itens que você passou, mas irei fazer isso agora.

Eu sou muito novo no ambiente mobile, a versão que baixei do android studio já veio a 3.5.3 e desde então ele usa o androidx e não tenho experiência ou know how suficiente para alterar, mas vou pesquisar pois o que disse faz todo sentido.

Como as versões do Android mudam rapidamente (ainda bem) creio que faltou um pouco de explicação sobre como fazer isso visto que as video aulas são um pouco mais antigas e feitas com versões anteriores que, para leigos como eu, na hora de baixar não temos como saber.

Mas me deu um norte para seguir e se preciso for vou instalar outras versões anteriores para ver se consigo fazer rodar.

Mais uma vez muito obrigado pelo apoio e pelo tempo que gastou nessa ajuda.