NullPointerException:尝试调用虚方法' void android.widget.TextView.setText(java.lang.CharSequence)'在null对象引用上

时间:2015-10-08 09:00:54

标签: java android arraylist nullpointerexception

所以我有这段代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favourites);
    assert getSupportActionBar() != null;
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    SharedPreferences prefs = getSharedPreferences("myFavs", 0);
    Map<String, String> m = (Map<String, String>) prefs.getAll();
    List<String> list = new ArrayList<>(m.values());

    ListView listView = (ListView) findViewById(R.id.favsList);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.listlayout, android.R.id.text1, list );
    listView.setAdapter(adapter);

它在logcat中输出此错误:

10-08 08:48:44.114  19390-19390/com.example.me1jmo.insult_generator E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.me1jmo.insult_generator, PID: 19390
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:399)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
        at android.widget.AbsListView.obtainView(AbsListView.java:2346)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1280)
        at android.widget.ListView.onMeasure(ListView.java:1188)
        at android.view.View.measure(View.java:18788)
        ...

我已经阅读了有关为什么会发生这种情况的文章,但我无法弄清楚我需要更改哪些代码才能使其正常工作。

2 个答案:

答案 0 :(得分:4)

问题即将发生,因为您所指的Textview不在您指定的布局中。

android.R.id.text1 

是Android OS类的Textview,内置于操作系统中。

您需要使用

中指定的Textview的ID
R.layout.listlayout

更改它,您的错误将得到解决。

答案 1 :(得分:0)

尝试将android.R.id.text1更改为R.id.text1。另外,请检查您的listlayout是否包含ID为text1的TextView。