0

我完全被 AsyncTask 所困扰,对我应该输入的参数、进度和结果感到困惑。在我的应用程序中,我需要在图库中显示图像。网址由所有图像组成。我通过 JSON 获取这些图像 url 并将响应保存在数组列表中并将其传递给新活动。但是,我可以将 JSON 响应保存在名为“image_urls”的数组列表中。作为 android 新手,我很困惑应该在后台和异步任务中提供哪些参数。提前致谢。

以下是我创建的单独类,在 doInBackground 中,我使用 JSON 获取 reuired 项目。我很困惑我应该在 AsyncTask 和 doInBackground 中放置哪些所有参数

public abstract  class Images1 extends AsyncTask<Void, Integer, Void>{
        private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
        private static String url = "http://www.ttt.com/album_pro/array_to_encode";

         ArrayList<String> urlList = new ArrayList<String>();
         JSONParser jParser = new JSONParser();
         ArrayList<String> image_urls = new ArrayList<String>();


         protected ArrayList<String>  doInBackground(Void... params) {
                 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();
                    }
               return image_urls;
             }

             protected void onProgressUpdate(Integer... progress) {

             }


             protected void onPostExecute(String[] result) {

             }

    }
4

2 回答 2

1

尝试这个,

    public class GetTask extends AsyncTask<Void, Void, Integer> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        mPreogressDialog = ProgressDialog.show(Mainactivity.this,
                "Loading", "Please wait");
    }

    @Override
    protected Integer doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //Do your stuff here call ur methods
                    imagedownload();
        return 0;
    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        // TODO Auto-generated method stub
        if (mPreogressDialog.isShowing())
            mPreogressDialog.dismiss();


    }

}

public vlid 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();
                }
}
于 2013-03-06T09:20:20.927 回答
1

如果您在http://developer.android.com/reference/android/os/AsyncTask.html上看到他们已经很好地解释了 AsyncTask。

但如果你不明白,让我试一试:

Android 通过一个线程修改用户界面,即所谓的UI 线程。如果您直接在 UI 线程上执行长时间运行的操作,例如从 Internet 下载文件,您的应用程序的用户界面将“<strong>冻结”,直到相应的任务完成。

AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

为了使用 AsyncTask 类,您必须扩展它并至少覆盖 doInBackground() 方法。

您需要实现的最常见方法是:

  1. onPreExecute()– 在线程开始运行之前在 UI 线程上调用。此方法通常用于设置任务,例如通过显示进度条。

  2. doInBackground(Params…)– 这是在后台线程上运行的方法。在这种方法中,您应该将您希望应用程序在后台执行的所有代码。完成后,它将结果发送到 onPostExecute()。

  3. onProgressUpdate()- 在 doInBackground() 中调用 publishProgress() 时调用。

  4. onPostExecute(Result)– 在后台线程完成后在 UI 线程上调用。它将从 doInBackground() 接收到的结果作为参数。

AsyncTask是一个泛型类,它使用 3 种类型:AsyncTask<Params, Progress, Result>.

Params– 输入。您传递给 AsyncTask 的内容(可以是下载文件的 URL)

Progress– 如果您有任何更新,则传递给 onProgressUpdate()(如果您想在 UI 上显示下载过程的进度,则使用此参数)

Result- 输出。什么将 doInBackground() 返回到 onPostExecute()

于 2013-03-06T09:28:58.390 回答