![](/img/trans.png)
[英]Java.Lang.NullPointerException while using listview simple adapter
[英]Simple Adapter - NullPointerException
atm我編寫了一個小程序,該程序與Web服務器上的MYSQL DB通信。 我使用json發送查詢,並希望在列表視圖中顯示答案。
我將來自json的數據存儲在Arraylist>中,以后再將它們寫入ListAdapter中。
它工作正常,但是每次在應用程序的第一次啟動時,我都會收到NullPointerException並退出應用程序。 如果我再次啟動該應用程序,則一切正常。
我的代碼部分:
public void updateJSONdata() {
mCommentList = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL);
try {
mComments = json.getJSONArray(TAG_POSTS);
for (int i = 0; i < mComments.length(); i++) {
JSONObject c = mComments.getJSONObject(i);
String id = c.getString(TAG_POST_ID);
String username = c.getString(TAG_USERNAME);
String title = c.getString(TAG_TITLE);
String content = c.getString(TAG_MESSAGE);
String datum = c.getString(TAG_DATUM);
String aktusr = c.getString(TAG_AKTUSR);
String maxusr = c.getString(TAG_MAXUSR);
String gender = c.getString(TAG_GENDER);
String activity = c.getString(TAG_ACTIVITY);
String category = c.getString(TAG_CATEGORY);
String cat = c.getString(TAG_CAT_ID);
int catid = Integer.parseInt(cat);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_POST_ID, id);
map.put(TAG_USERNAME, username);
map.put(TAG_TITLE, title);
map.put(TAG_MESSAGE, content);
map.put(TAG_DATUM, datum);
map.put(TAG_AKTUSR, aktusr);
map.put(TAG_MAXUSR, maxusr);
map.put(TAG_GENDER, gender);
map.put(TAG_ACTIVITY, activity);
map.put(TAG_CATEGORY, category);
//map.put(TAG_CAT, category[catid-1]);
map.put(TAG_PIC_ID, Integer.toString(PIC[catid-1]));
mCommentList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
//String[] from = {TAG_CAT, TAG_POST_ID, TAG_TITLE, TAG_MESSAGE, TAG_USERNAME};
}
private void updateList() {
ListAdapter adapter = new SimpleAdapter(this, mCommentList,
R.layout.single_comment, new String[] {TAG_PIC_ID,TAG_CATEGORY, TAG_ACTIVITY, TAG_DATUM, TAG_AKTUSR, TAG_MAXUSR, TAG_GENDER, /*TAG_POST_ID,*/ TAG_TITLE, TAG_MESSAGE,
TAG_USERNAME }, new int[] { R.id.imgrow, R.id.category, R.id.activity/*R.id.id*/ , R.id.datum, R.id.aktusr, R.id.maxusr, R.id.gender, /*R.id.category,*/ R.id.title, R.id.message,
R.id.username });
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
int intid = (int)id;
Toast.makeText(getApplicationContext(), mCommentList.get(intid).get(TAG_POST_ID).toString(), Toast.LENGTH_SHORT).show();
}
});
}
public class LoadComments extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ReadComments.this);
pDialog.setMessage("Loading Comments...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Boolean doInBackground(Void... arg0) {
//we will develop this method in version 2
updateJSONdata();
return null;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
pDialog.dismiss();
//we will develop this method in version 2
updateList();
}
}
09-27 15:14:17.593:E / AndroidRuntime(7876):致命異常:主09-27 15:14:17.593:E / AndroidRuntime(7876):進程:com.example.login_remote,PID:7876 09-27 15:14:17.593:E / AndroidRuntime(7876):java.lang.NullPointerException 09-27 15:14:17.593:E / AndroidRuntime(7876):在android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)09 -27 15:14:17.593:E / AndroidRuntime(7876):位於android.widget.ListView.setAdapter(ListView.java:480)09-27 15:14:17.593:E / AndroidRuntime(7876):位於android.app .ListActivity.setListAdapter(ListActivity.java:265)09-27 15:14:17.593:E / AndroidRuntime(7876):at com.example.login_remote.ReadComments.updateList(ReadComments.java:270)09-27 15:14 :17.593:E / AndroidRuntime(7876):位於com.example.login_remote.ReadComments.access $ 2(ReadComments.java:256)09-27 15:14:17.593:E / AndroidRuntime(7876):位於com.example.login_remote .ReadComments $ LoadCategorys.onPostExecute(ReadComments.java:413)09-27 15:14:17.593:E / AndroidRuntime(7876):at com.example.login_remote.ReadCom ments $ LoadCategorys.onPostExecute(ReadComments.java:1)09-27 15:14:17.593:E / AndroidRuntime(7876):位於android.os.AsyncTask.finish(AsyncTask.java:632)09-27 15:14: 17.593:E / AndroidRuntime(7876):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)09-27 15:14:17.593:E / AndroidRuntime(7876):在android.os.AsyncTask $ InternalHandler handleMessage(AsyncTask.java:645)09-27 15:14:17.593:E / AndroidRuntime(7876):位於android.os.Handler.dispatchMessage(Handler.java:102)09-27 15:14:17.593:E / AndroidRuntime(7876):位於android.os.Looper.loop(Looper.java:212)09-27 15:14:17.593:E / AndroidRuntime(7876):位於android.app.ActivityThread.main(ActivityThread.java:5151 )09-27 15:14:17.593:E / AndroidRuntime(7876):位於java.lang.reflect.Method.invokeNative(本機方法)09-27 15:14:17.593:E / AndroidRuntime(7876):位於Java。 lang.reflect.Method.invoke(Method.java:515)09-27 15:14:17.593:E / AndroidRuntime(7876):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868 )09-27 15:14:17.593 :E / AndroidRuntime(7876):位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)09-27 15:14:17.593:E / AndroidRuntime(7876):位於dalvik.system.NativeStart。主要(本機方法)
所以看起來像是問題所在
09-27 15:14:17.593:E / AndroidRuntime(7876):在com.example.login_remote.ReadComments.updateList(ReadComments.java:270)
setListAdapter(adapter);
你們中有人可以看到這個錯誤嗎? 我只是不知道這里出了什么問題,以及為什么錯誤僅在第一次啟動時出現。
thx,Greetz AllesFAM
您所做的是調用AsyncTask,它確實在UI之外運行了Task,因此您可以顯示內容,甚至可以從HTTP請求中獲取注釋,從而解決許多問題
首先:您可以像這樣手動用臨時數據填充mComments數組
mCommentList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.add("","");
mCommentList.add(map);
或第二種方式:您可以等待AsyncTask結果再顯示在UI中,然后執行此操作。我需要編寫代碼來調用LoadComments,但您可以在調用中像這樣簡單地完成操作
Boolean finished = LoadComments.execute().get();
我在OnResume()函數中調用LoadComments()
protected void onResume() { // TODO Auto-generated method stub super.onResume(); //loading the comments via AsyncTask new LoadComments().execute(); }
但是我必須在哪里檢查成品? 原因我在UpdateJsonData和更新列表之間需要它嗎? –
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.