数组适配器NotifyDataSetChanged()NullPointerException异常的Andr​​oid [英] Array Adapter NotifyDataSetChanged() NullPointerException Android

查看:193
本文介绍了数组适配器NotifyDataSetChanged()NullPointerException异常的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我增加了地图列表,然后刷新阵列适配器。这是可以正常使用较早,但现在,我使用的是的addItem()方法,从两个不同的方法,它抛出一个空指针。我希望我的code将清理我所说的:

I am adding a map to a list and then refreshing the array adapter. This was working perfectly earlier, but now that I am using an addItem() method from two different methods, it throws a NullPointer. I hope my code will clear up what I am saying:

SimpleAdapter adapter;
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
ListView listthings;
int[] to;
String[] from;
String painLevelString, timeOfPainString, textTreatmentString,
        painLocation, row1, row2, name;

OnCreate(){
 if(getIntent().getStringExtra("newPainLevel")!= null){
        createNewEditedEntry();

        }
     adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout,
            from, to);
    listthings.setAdapter(adapter);
}

 private void createNewEditedEntry() {
    String newPainLevel = this.getIntent().getStringExtra("newPainLevel");
    String newPainTime =this.getIntent().getStringExtra("newPainTime");
    String newTreatment =this.getIntent().getStringExtra("newTreatment");
    painLevelString = newPainLevel;
    timeOfPainString = newPainTime;
    textTreatmentString = newTreatment;
    row1 = "sample1";
    row2 = "sample2";

    addItem();
    //painItems.remove(getIntent().getStringExtra("position"));
    //adapter.notifyDataSetChanged();

 }

@Override
// on the activityresult,get the string extra, then add the item to the list
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 1) {
        row1 = data.getStringExtra("com.painLogger.row1");
        row2 = data.getStringExtra("com.painLogger.row2");


        painLevelString = data.getStringExtra("com.painLogger.painLevel");
        painLocation = data.getStringExtra("painLocation");
        timeOfPainString = data.getStringExtra("com.painLogger.painTime");
        textTreatmentString = data
                .getStringExtra("com.painLogger.treatment");
        addItem();
    }
}

// to add the item, put it in the map, and add the map into the list
private void addItem() {
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("row_1", row1);
    map.put("row_2", row2);
    map.put("row_3", painLevelString);
    map.put("row_4", painLocation);
    map.put("row_5", timeOfPainString);
    map.put("row_6",textTreatmentString);
    painItems.add(map);
        adapter.notifyDataSetChanged(); //Null Pointer **HERE**
    }

只是要清楚,createNewEditedEntry()和的onActivityResult()将永远不会在同一时间被称为永不发生冲突。它们是两个完全不同的事件。它是只用工作的onActivityResult,但现在当我使用CreateNewEditedEntry(),它已停止工作。我还检查并确保,没有,我从我的意图获取字符串为null。

Just to be clear, createNewEditedEntry() and onActivityResult() are never called at the same time and never clash. They are two completely different occurrences. It was working with just the OnActivityResult, but now when I use CreateNewEditedEntry(), it has stopped working. I have also checked and made sure that none of the Strings that I fetch from my intent are null.

推荐答案

您需要初始化适配器你打电话之前 createNewEditedEntry 的onCreate

You need to initialize adapter before you call createNewEditedEntry in onCreate:

OnCreate(){
     adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout, from, to);
      if(getIntent().getStringExtra("newPainLevel")!= null){
        createNewEditedEntry();    
      }
// ...
}

另外,适配器将在的addItem 空在那里叫(的最后一行createNewEditedEntry )。

这篇关于数组适配器NotifyDataSetChanged()NullPointerException异常的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆