2013-05-31 90 views
0

直到现在我所做的是在一个活动上我创建了listview。在选择一个列表项时,它会打开一个包含3个选项卡片断的活动。在其中一个标签中,我创建了一个listfragment和detailfragment。 应用程序在一段时间后关闭,并且列表也没有更新。 我得到nullpointerexception。还附加了堆栈跟踪。ListView的片段

public class MyListFragment1 extends ListFragment { 


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

     ArrayList<HashMap<String, String>> productsList; 

     // url to get all products list 
     private static String url_all_patients = "http://192.168.44.208/get_all_patients.php"; 

     // JSON Node names 
     private static final String TAG_SUCCESS = "success"; 
     private static final String TAG_PRODUCTS = "products"; 
     private static final String TAG_PATIENT_ID = "patient_id"; 
     private static final String TAG_PATIENT_NAME = "patient_name"; 

     JSONArray products = null; 

     Context ctx; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     ctx = inflater.getContext();//.getApplicationContext(); 

     new LoadAllPatients().execute(); 

     return inflater.inflate(R.layout.listfragment1, container, false); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     Toast.makeText(
       getActivity(), 
       getListView().getItemAtPosition(position).toString(), 
       Toast.LENGTH_LONG).show(); 
    } 






    class LoadAllPatients extends AsyncTask<String, String, String> { 


     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(url_all_patients, "GET", params); 

      // Check your log cat for JSON reponse 
      Log.d("All Patients: ", json.toString()); 

      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(); i++) { 
         JSONObject c = products.getJSONObject(i); 

         // Storing each json item in variable 
         String id = c.getString(TAG_PATIENT_ID); 
         String name = c.getString(TAG_PATIENT_NAME); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put(TAG_PATIENT_ID, id); 
         map.put(TAG_PATIENT_NAME, name); 

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

         ListAdapter adapter = new SimpleAdapter(ctx, productsList,R.layout.list_item,new String[] { TAG_PATIENT_ID, 
           TAG_PATIENT_NAME}, 
         new int[] { R.id.pid, R.id.name }); 

              // updating listview 
         setListAdapter(adapter); 
        } 
       } else { 
        // no products found 
        // Launch Add New product Activity 
        //Intent i = new Intent(getApplicationContext(), 
        //  NewProductActivity.class); 
        // Closing all previous activities 
        //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        //startActivity(i); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

    } 

} 

请参考堆栈跟踪。

05-31 17:13:34.651: E/AndroidRuntime(20173): FATAL EXCEPTION: AsyncTask #3 
05-31 17:13:34.651: E/AndroidRuntime(20173): java.lang.RuntimeException: An error occured while executing doInBackground() 
05-31 17:13:34.651: E/AndroidRuntime(20173): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.lang.Thread.run(Thread.java:856) 
05-31 17:13:34.651: E/AndroidRuntime(20173): Caused by: java.lang.NullPointerException 
05-31 17:13:34.651: E/AndroidRuntime(20173): at com.example.logincheck.MyListFragment1$LoadAllPatients.doInBackground(MyListFragment1.java:234) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at com.example.logincheck.MyListFragment1$LoadAllPatients.doInBackground(MyListFragment1.java:1) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
05-31 17:13:34.651: E/AndroidRuntime(20173): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
05-31 17:13:34.651: E/AndroidRuntime(20173): ... 5 more 

这里第234行是“productsList.add(map);”

请help.Thanks

+0

您需要在执行AsyncTask之前初始化您的ArrayList'productsList',例如,在234行上,你正试图给一个空对象添加一个hashmap。修复并重新发布,如果你仍然有问题。 – Jon

+0

引起:android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图。 ...现在得到这个错误 –

+0

Thnx很多...解决了问题。 –

回答

0

正如乔恩在你的问题的评论中写道,该ArrayList需要被初始化。我猜这样的事情应该这样做(未测试):

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