I would like to display some data from my server in my ListView using asyncTask . Connection and JsonParser work fine, but I have an error in my OnPostExecute() when I try to put my data in a ListView .
So this is the class that calls asyncTask :
public class GetInfo extends Activity{ ListView listeView; protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.listdata); listeView = (ListView) findViewById(R.id.maListeView); GetJson getJson = new GetJson(GetInfo.this); getJson.execute(); } }
There is no problem. This is my asyncTask class:
class GetJson extends AsyncTask<Void, Integer, ArrayList<String>> { private Context Mycontext; private ListView listview; private ArrayAdapter<String> arrayadapter; private ProgressDialog pDialog; private ArrayList<String> donnees; private ListActivity listAct; public GetJson(GetInfo getInfo) { Mycontext = getInfo; } @Override protected void onPreExecute() { // Showing progress dialog before sending http request this.pDialog = new ProgressDialog(Mycontext); this.pDialog.setMessage("Please wait.."); this.pDialog.setIndeterminate(true); this.pDialog.setCancelable(false); this.pDialog.show(); } @Override protected ArrayList<String> doInBackground(Void... arg0) { String result = null; InputStream is = null; JSONObject json_data=null; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); this.donnees = new ArrayList<String>(); try{ //commmand http HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://192.168.0.100/timesync.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch(Exception e){ Log.i("taghttppost",""+e.toString()); } //parse response try { BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch(Exception e) { Log.i("tagconvertstr",""+e.toString()); } //get json data try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++) { json_data = jArray.getJSONObject(i); this.donnees.add("date :"+ json_data.getString("time") + " ou " + json_data.getString("date") + json_data.getString("hour")); } } catch(JSONException e){ Log.i("tagjsonexp",""+e.toString()); } catch (ParseException e) { Log.i("tagjsonpars",""+e.toString()); } return this.donnees; } @Override protected void onPostExecute(ArrayList<String> donnees) { super.onPostExecute(donnees); this.pDialog.dismiss(); for(int i=0;i<donnees.size();i++) { Log.i("time", donnees.get(i)); } // this.arrayadapter = new ArrayAdapter<String>(Mycontext, android.R.layout.simple_list_item_1, this.donnees); // this.listview.setAdapter(this.arrayadapter); } }
My problem is the commented lines:
// this.arrayadapter = new ArrayAdapter<String>(Mycontext, android.R.layout.simple_list_item_1, this.donnees); // this.listview.setAdapter(this.arrayadapter);
and I donβt understand why ...
That's my fault:
11-05 16:43:36.560: E/AndroidRuntime(11200): FATAL EXCEPTION: main 11-05 16:43:36.560: E/AndroidRuntime(11200): java.lang.NullPointerException 11-05 16:43:36.560: E/AndroidRuntime(11200):at com.json.GetJson.onPostExecute(Adapter.java:134) 11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask.finish(AsyncTask.java:631) 11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask.access$600(AsyncTask.java:177) 11-05 16:43:36.560: E/AndroidRuntime(11200):at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) . . .
The result is logged, so I'm sure my code is passed to OnPostExecute() .