【问题标题】:Android ArrayAdapter NullPointerException (but is not null)Android ArrayAdapter NullPointerException(但不为空)
【发布时间】:2017-08-08 03:34:09
【问题描述】:

我正在尝试创建与 firebase 的聊天,尝试将添加的用户添加到朋友 ListView,但是当我放入 .setAdapter() 时,它说我在 .setAdapter 行上有一个 java.lang.NullPointerException。

package studio.brunocasamassa.superchat.fragments;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.firebase.database.DatabaseReference;

import java.util.ArrayList;

import studio.brunocasamassa.superchat.R;

import static android.R.layout.activity_list_item;
import static android.R.layout.simple_list_item_2;

/**
 * A simple {@link Fragment} subclass.
 */


public class ContatosFragment extends Fragment {

    private ListView listview_nomes;
    private ArrayList<String> arraylist_nomes;
    private ArrayAdapter<String> adapter_nomes = null;
    private DatabaseReference firebaseDatabase;


    public ContatosFragment() {
        // Required empty public constructor
    }


    public String insertContact(String nomeContato) {
        arraylist_nomes = new ArrayList<String>();
        arraylist_nomes.add(nomeContato);
        adapter_nomes = new ArrayAdapter<String>(getContext(),
                android.R.layout.simple_list_item_2,
                android.R.id.text2,
                arraylist_nomes);
        return nomeContato;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        if (adapter_nomes == null) {
            insertContact("teste");
        }

        listview_nomes = (ListView) getActivity().findViewById(R.id.ListContatos);
        System.out.println(adapter_nomes);
> the problem:
        listview_nomes.setAdapter(adapter_nomes);


        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_contatos, container, false);

    }


}

我在另一个类中调用 insertContact 方法,如下所示:

      Contato contato = new Contato();
                                        contato.setidUser(idContact);
                                        contato.setEmail(emailContact);
                                        contato.setNome(usuarioContato.getNome());
            ContatosFragment contact = new ContatosFragment();
                                            contact.insertContact(usuarioContato.getNome());
System.out.println("nome usuario: "+usuarioContato.getNome());

我不知道如何解决它,如果有人知道, 谢谢

更新

我只是更改了我的 insertContact 方法(因为问题看起来像是其中的 ArrayAdapter 变量):

public String insertContact(String nomeContato) {
    arraylist_nomes = new ArrayList<String>();
    arraylist_nomes.add(nomeContato);
    System.out.println("nomes_array: " + arraylist_nomes);

    adapter_nomes = new ArrayAdapter<String>(
            getContext().getApplicationContext(),
            android.R.layout.simple_list_item_2,
            android.R.id.text2,
            arraylist_nomes);

    return nomeContato;
}

【问题讨论】:

  • 请发布您的异常堆栈跟踪。您的 fragment.contatos.xml 也可能有用。
  • 您的listview 为空,请检查以下答案..

标签: android listview arraylist nullpointerexception android-arrayadapter


【解决方案1】:

在 onCreateVIew() 中执行此操作

View root = inflater.inflate(R.layout.fragment_contatos, container, false);
listview_nomes = (ListView) root.findViewById(R.id.ListContatos);
listview_nomes.setAdapter(adapter_nomes);


return root;

问题是

listview_nomes = (ListView) getActivity().findViewById(R.id.ListContatos);

尝试在活动布局而不是片段布局中查找列表视图。因此你得到一个空指针。您的列表视图引用为空。

【讨论】:

  • 感谢您的帮助,我刚刚尝试了您和@rafsanahmad007 的建议,但仍然没有。现在它似乎是我的 array_adapter 变量为空。在我的 inserContact 方法中,我想知道我是否以错误的方式传递字符串。
【解决方案2】:

您的onCreateView() 应如下所示:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_contatos, container, false);
        if (adapter_nomes == null) {
            insertContact("teste");
        }

        listview_nomes = (ListView) v.findViewById(R.id.ListContatos);

        System.out.println(adapter_nomes);
        listview_nomes.setAdapter(adapter_nomes);
        return v;
}

您必须从当前布局视图中获取ListView,而不是从提供空引用的getActivity() 获取

 listview_nomes = (ListView) v.findViewById(R.id.ListContatos);

【讨论】:

  • 刚刚尝试这样做,但现在它告诉我我的 insertContact 方法中的 adapter_nomes 为空,也许我传递了错误的温度。
  • 而不是 getContext() 尝试使用 getActivity() 。另外,如果您以前的问题解决了..将答案标记为正确..谢谢
  • 还是什么都没有,现在正在处理它... tks 4 的帮助
  • 我试图用这么多的therms改变我的ArrayAdapter,但仍然没有:只是用它编辑了问题摘要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多