Je suis en train de retourner la liste des tweets après l'analyse de la tâche asynchrone .... Mais je ne récupère pas l'arrayliste de la tâche. Quelqu'un peut-il suggérer une solution?Comment retourner l'objet en utilisant une tâche asynchrone?
public class Main extends ListActivity {
String MY_APP_TAG = "com.list";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList listItems = new ArrayList();
new myAsyncTask().execute(listItems);
setListAdapter(new ArrayAdapter(this, R.layout.tweet, R.id.tweet,listItems));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// When clicked, show a Toaster
Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
private class myAsyncTask extends AsyncTask<ArrayList<Object>, Void, Void>
{
ArrayList<Object> listItems;
ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(Main.this, "", "Loading....");
}
@Override
protected Void doInBackground(ArrayList<Object>... params) {
String host = "api.twitter.com";
String twitterURL = "http://"+host+"/1/statuses/user_timeline.json?screen_name=i1990jain&count;=10";
try {
HttpClient client = new DefaultHttpClient();
BasicHttpContext localContext = new BasicHttpContext();
HttpHost targetHost = new HttpHost(host, 80, "http");
HttpGet httpget = new HttpGet(twitterURL);
httpget.setHeader("Content-Type", "application/json");
HttpResponse response = client.execute(targetHost, httpget, localContext);
HttpEntity entity = response.getEntity();
Object content = EntityUtils.toString(entity);
Log.d(MY_APP_TAG, "OK: " + content.toString());
JSONArray ja = new JSONArray(content.toString());
for(int i = 0; i < ja.length(); i++){
JSONObject jo = ja.getJSONObject(i);
listItems.add(jo.getString("text"));
}
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
}
}
}
Soit deux threads en cours d'exécution en mode asynchrone et en utilisant AsyncTask.onPostExecute() gérer résultat, ou en utilisant explicitement thread d'interface utilisateur bloc AsyncTask.get() et attendre résultat de retour de thread de travail. Notez que ces derniers sacrifient réellement le bénéfice de AsyncTask et peuvent provoquer une exception ANR. – yorkw