2013-06-03 17 views
4

我開發了連接到服務器並接收JSON響應的應用程序,但它工作正常。但是它放入ArrayList中的Hashmap和HashMap中以顯示數據。上而在ArrayList.My logcat的推杆的Hashmap是doInBackground中的Java.lang.NullPointerException將ArrayList中的HashMap放入

06-03 16:23:10.540: E/AndroidRuntime(15457): FATAL EXCEPTION: AsyncTask #1 
06-03 16:23:10.540: E/AndroidRuntime(15457): java.lang.RuntimeException: An error occured while executing doInBackground() 
06-03 16:23:10.540: E/AndroidRuntime(15457): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.lang.Thread.run(Thread.java:856) 
06-03 16:23:10.540: E/AndroidRuntime(15457): Caused by: java.lang.NullPointerException 
06-03 16:23:10.540: E/AndroidRuntime(15457): at com.example.project.MainActivity$LoadAllProducts.doInBackground(MainActivity.java:498) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at com.example.project.MainActivity$LoadAllProducts.doInBackground(MainActivity.java:1) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
06-03 16:23:10.540: E/AndroidRuntime(15457): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
06-03 16:23:10.540: E/AndroidRuntime(15457): ... 5 more 

和我的課是

public class asasa extends Activity { 
    //ListView listView; 
    Intent intent; 
    public int currentimageindex=0; 
    private ProgressDialog pDialog; 

    Timer timer; 
    TimerTask task; 
    ImageView slidingimage; 

    ProgressDialog progressDialog; 


    // Creating JSON Parser object 
    JSONParser jParser = new JSONParser(); 

    static final String URL = "http://172.20.55.175/android_connect/get_all_products.php"; 

    private static final String TAG_SUCCESS = "success"; 
    private TextView mStatusView; 
    private EditText searchEditText; 


    private static final String TAG_PRODUCTS = "products"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_Description = "description"; 
    private static final String TAG_URL = "url"; 
    private static final String TAG_Price = "price"; 


    ListView list; 
    LazyAdapter adapter; 
    // flag for Internet connection status 
    Boolean isInternetPresent = false; 

    // products JSONArray 

    JSONArray products = null; 

    // Connection detector class 
    ConnectionDetector cd; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     cd = new ConnectionDetector(getApplicationContext()); 

     // get Internet status 
     isInternetPresent = cd.isConnectingToInternet(); 

     if (isInternetPresent) { 
      LoadAllProducts il = new LoadAllProducts(); 
      il.execute(URL); 
     } 
     else 
     { 
      // Internet connection is not present 
      // Ask user to connect to Internet 
      Toast.makeText(asasa.this, "No Internet Connection You don't have internet connection.", Toast.LENGTH_LONG).show(); 
     } 

    } 
    public void longToast(CharSequence message) { 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
    } 



    public class LazyAdapter extends BaseAdapter { 

     private Activity activity; 
     private ArrayList<HashMap<String, String>> data; 
     private LayoutInflater inflater=null; 
     public ImageLoader imageLoader; 

     public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
      activity = a; 
      data=d; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      imageLoader=new ImageLoader(activity.getApplicationContext()); 
     } 

     public int getCount() { 
      return data.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View vi=convertView; 
      if(convertView==null) 
       vi = inflater.inflate(R.layout.list_row, null); 

      TextView title = (TextView)vi.findViewById(R.id.title); // title 
      TextView artist = (TextView)vi.findViewById(R.id.artist); // artist name 
      TextView duration = (TextView)vi.findViewById(R.id.duration); // duration 
      ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image 

      HashMap<String, String> song = new HashMap<String, String>(); 
      song = data.get(position); 

      // Setting all values in listview 
      title.setText(song.get(asasa.TAG_NAME)); 
      artist.setText(song.get(asasa.TAG_Description)); 
      duration.setText(song.get(asasa.TAG_Price)); 
      imageLoader.DisplayImage(song.get(asasa.TAG_URL), thumb_image); 
      return vi; 
     } 
    } 






    class LoadAllProducts extends AsyncTask<String, String, String> { 
     // creating new HashMap 
     ArrayList<HashMap<String, String>> productsList; 



     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(asasa.this); 
      pDialog.setMessage("Loading products. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting All products from url 
     * */ 
     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(URL, "GET", params); 

      // Check your log cat for JSON reponse 

      try { 
       // Checking for SUCCESS TAG 
       int 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()-1; i++) { 
         JSONObject c = products.getJSONObject(i); 

         String name = c.getString(TAG_NAME); 
         String description = c.getString(TAG_Description); 
         String URl = c.getString(TAG_URL); 
         String price = c.getString(TAG_Price); 



         // adding each child node to HashMap key => value 
         map.put(TAG_NAME, name); 
         map.put(TAG_Description, description); 
         map.put(TAG_URL, URl); 
         map.put(TAG_Price, price); 

         // adding HashList to ArrayList 
         productsList.add(map); 

        } 
       } else { 
        // no products found 
        // Launch Add New product Activity 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all products 
      list=(ListView)findViewById(R.id.list); 

      // Getting adapter by passing xml data ArrayList 
      adapter=new LazyAdapter(asasa.this, productsList);   
      list.setAdapter(adapter); 




     } 

    } 


    public void onPause() 
    { 
     super.onPause(); 
     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
      // progressDialog.setCancelable(true); 
     } 

    } 

} 

線498

productsList.add(map); 
在受保護的字符串doInBackground

(字符串參數... args)

我無法弄清楚錯誤...爲什麼它是occuring.it被成功地返回JSON響應,但可以把HashMap中

回答

8

你沒有初始化您

ArrayList<HashMap<String, String>> productsList; 

使用前初始化它。

ArrayList<HashMap<String, String>> productsList = new ArrayList<HashMap<String, String>>(); 
5
ArrayList<HashMap<String, String>> productsList; 

這隻聲明productsList。你從來沒有初始化它,所以它是null defaut。你應該初始化:

ArrayList<HashMap<String, String>> productsList = new ArrayList<HashMap<String, String>>(); 

而且通常我建議在聲明中使用的接口,所以如果需要的話沒有太多的頭痛以後可以切換接口的實現。同時指定可能的最小可見度是一個很好的OOP實踐,因爲它強制封裝。

private List<Map<String, String>> productsList = new ArrayList<HashMap<String, String>>(); 
+0

+1這是一個完美的答案...我不知道爲什麼你沒有得到像其他 –

+0

upvotes @PankajKumar我通常不會得到太多的upvotes,走不知道爲什麼? :) – m0skit0

+1

:D哈哈哈...那是真的。有時'評論'得到太多upvotes ..:D –