2015-07-10 88 views
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 
+1

什麼是478行? – FlanschiFox

+0

我會冒險猜測productsList爲null –

+0

productsList.add(map) – hdiz

回答

0

其實問題是你所得到的產品陣列成功的對象,但它是另一個對象

JSON: 「產品」:[], 「成功」 :「1」

從您的代碼中刪除此行:

String success = json.getString(TAG_SUCCESS)`; 
+0

不,依然如此 – hdiz