我有一个应用程序,其中有一个名为“Images1”的单独的类,它扩展了AsyncTask,我通过JSON获取所有图库URL。我在另一个活动中实例化AsyncTask类,我需要在其中返回的arraylist “Images1”类。但是我无法得到arraylist。请建议采取哪些步骤。谢谢提前
public class Images1 extends AsyncTask<Void, Void, ArrayList<String>> {
ProgressDialog mPreogressDialog;
private static String url = "http://www.tts.com/album_pro/array_to_encode";
JSONParser jParser = new JSONParser();
ArrayList<String> image_urls = new ArrayList<String>();
@Override
protected void onPreExecute() {
mPreogressDialog = ProgressDialog.show(Images1.this, "", "Uploading Document. Please wait...", true);
}
@Override
protected ArrayList<String> doInBackground(Void... params) {
// TODO Auto-generated method stub
//Do your stuff here call ur methods
imagedownload();
return image_urls;
}
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
// TODO Auto-generated method stub
if (mPreogressDialog.isShowing())
mPreogressDialog.dismiss();
}
public void imagedownload(){
JSONObject json = jParser.getJSONFromUrl(url);
try{
JSONObject seo = json.getJSONObject("SEO");
JSONArray folio = seo.getJSONArray("Folio");
JSONArray image_urls1 = new JSONArray();
String s1=seo.getString("Folio");
for(int i=0;i<folio.length();++i)
{
String m = folio.getString(i);
Log.v("M"+i,m);
image_urls.add(m+ ",");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
在另一个活动中,我正在实例化该类并将其称为
Images1 img1;
new img1.execute();
答案 0 :(得分:2)
我无法得到arraylist。
将结果返回到您正在启动的Activity中AsyncTask你将需要执行AsyncTask:
ArrayList<String> image_urls=new Images1.execute(params_).get();
但这将阻止UI线程执行,直到AsyncTask doInBackground方法执行完成。如果您使用AsyncTask.get()方法来避免UI冻结,请使用Thread
执行AsyncTask
第二种方法是使用类构造函数将Activity Context传递给Images1类,并在onPostExecute
内完成工作。例如:
public class Images1 extends AsyncTask<Void, Void, ArrayList<String>> {
//...your code here..
Context context;
public Images1(Context context){
this.context=context;
}
////....your code here....
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
// TODO Auto-generated method stub
// do your work here...
}
}
使用context
从onPostExecute
答案 1 :(得分:1)
您可以在此处使用消息和处理程序。看一下这篇文章:http://mobileorchard.com/android-app-developmentthreading-part-1-handlers/。您可以从另一个包含ArrayList的线程发送消息。然后在您的活动的handleMessage()函数中处理此消息。
答案 2 :(得分:1)
我建议你只需要接受一个新的Arraylist并创建一个for循环,并在该列表中的image_urls的所有值中添加AsyncTask类的onPostExecute
方法并调用该arraytlist。
答案 3 :(得分:0)
另一个选择是扩展此AsyncTask。在您的活动中调用以下代码:
new Images1() {
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
//here you process received result
}
}.execute();