0
我有一個ArrayList<HashMap<String,String>>
AsyncTask
我想將數據庫中檢索到的數據存入其中,然後我想訪問我的列表中的每個元素onPostExecute
,但我在獲取值時出錯來自arraylist。我在我的代碼中記錄了哪個PID標記,但在logcat中我看不到它。無法訪問AsyncTask中的ArrayList HashMap值
class Search extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> {
int success ;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected ArrayList<HashMap<String, String>> doInBackground(String... args) {
List<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("search", result));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest("http://timit.ir/search/query1",
"POST", param);
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
try {
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_PID);
String bname = c.getString(TAG_NAME);
String success = json.getString(TAG_SUCCESS);
String subname = c.getString(TAG_SUBNAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_PID, id);
map.put(TAG_NAME, bname);
map.put(TAG_SUCCESS, success);
map.put(TAG_SUBNAME, subname);
// adding HashList to ArrayList
productsList.add(map);
}
Log.d("PID:", productsList.get(0).get(TAG_PID));
}
}
catch (JSONException e) {
e.printStackTrace();
}
return productsList;
}
/**
* After completing background task Dismiss the progress dialog
* **/
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
Log.d("succeeeeeeeeeessssss:::", result.get(0).get(TAG_SUCCESS));
if(result.get(0).get(TAG_SUCCESS) !=null && result.get(0).get(TAG_SUCCESS).equals("1")){
Toast.makeText(getBaseContext(), "ok", 2000).show();
}
else
{
Toast.makeText(getBaseContext(), "fail", 2000).show();
}
}
}
的logcat:
D/Create Response(3355): {"product":[{"Pro_Details":"kjhkh","Pro_Subname":"kjhkh","Pro_Name":"kjkhkj","Pro_ID":"16"}],"success":1}
W/dalvikvm(3355): threadid=36: thread exiting with uncaught exception (group=0x40a71930)
E/AndroidRuntime(3355): FATAL EXCEPTION: AsyncTask #5
E/AndroidRuntime(3355): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(3355): at android.os.AsyncTask$3.done(AsyncTask.java:299)
E/AndroidRuntime(3355): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
E/AndroidRuntime(3355): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
E/AndroidRuntime(3355): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
E/AndroidRuntime(3355): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
E/AndroidRuntime(3355): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
E/AndroidRuntime(3355): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
E/AndroidRuntime(3355): at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime(3355): Caused by: java.lang.NullPointerException
E/AndroidRuntime(3355): at com.example.timittest.MainActivity$Search.doInBackground(MainActivity.java:478)
E/AndroidRuntime(3355): at com.example.timittest.MainActivity$Search.doInBackground(MainActivity.java:1)
E/AndroidRuntime(3355): at android.os.AsyncTask$2.call(AsyncTask.java:287)
E/AndroidRuntime(3355): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
E/AndroidRuntime(3355): ... 4 more
什麼是478行? – FlanschiFox
我會冒險猜測productsList爲null –
productsList.add(map) – hdiz