【问题标题】:NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference [duplicate]NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”[重复]
【发布时间】:2015-10-08 09:00:54
【问题描述】:

所以我有这个代码:

@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)
        ...

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

【问题讨论】:

  • 你能发布“listlayout”代码吗?在 listlayout 中使用 textview 而不是标准的 android.R.id.text1
  • 你能分享你的列表布局吗

标签: java android arraylist nullpointerexception


【解决方案1】:

问题来了,因为您引用的 Textview 不在您指定的布局中。

android.R.id.text1 

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

您需要使用您在

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      替换这个

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

      有了这个

      ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, android.R.id.text1, list );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2021-07-15
        相关资源
        最近更新 更多