如何在Android应用程序中使用AsyncTask

如何在Android应用程序中使用AsyncTask,android,json,android-asynctask,Android,Json,Android Asynctask,我被AsyncTask困住了,对参数、进度和结果感到困惑。在我的应用程序中,我需要显示图像 在画廊里。url由所有图像组成。我通过JSON获取这些图像URL,并将响应保存在arraylist中,然后将其传递给新的 活动。但是,我能够将JSON响应保存在名为“image_url”的arraylist中。由于我是android新手,我不知道params应该是什么 在后台和异步任务中提供。提前谢谢 下面是我在doInBackground中创建的一个单独的类,我使用JSON获取重新需要的项目 publi

我被AsyncTask困住了,对参数、进度和结果感到困惑。在我的应用程序中,我需要显示图像 在画廊里。url由所有图像组成。我通过JSON获取这些图像URL,并将响应保存在arraylist中,然后将其传递给新的 活动。但是,我能够将JSON响应保存在名为“image_url”的arraylist中。由于我是android新手,我不知道params应该是什么 在后台和异步任务中提供。提前谢谢

下面是我在doInBackground中创建的一个单独的类,我使用JSON获取重新需要的项目

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) {

             }

    }
公共抽象类Images1扩展了异步任务{
私有静态易失性执行器sDefaultExecutor=串行执行器;
专用静态字符串url=”http://www.ttt.com/album_pro/array_to_encode";
ArrayList urlList=新的ArrayList();
JSONParser jParser=新的JSONParser();
ArrayList image_url=新的ArrayList();
受保护的ArrayList doInBackground(无效…参数){
JSONObject json=jParser.getJSONFromUrl(url);
试一试{
JSONObject seo=json.getJSONObject(“seo”);
JSONArray folio=seo.getJSONArray(“folio”);
JSONArray image_urls1=新的JSONArray();
字符串s1=seo.getString(“Folio”);
对于(int i=0;i试试这个

    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();
                }
}
公共类GetTask扩展异步任务{
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
MPREogresDialog=ProgressDialog.show(Mainactivity.this,
“正在装货”,“请稍候”);
}
@凌驾
受保护的整数doInBackground(Void…params){
//TODO自动生成的方法存根
//你这里的东西叫你的方法吗
imagedownload();
返回0;
}
受保护的void onPostExecute(整数结果){
super.onPostExecute(结果);
//TODO自动生成的方法存根
if(mpreogresdialog.isShowing())
mpreogresdialog.disclose();
}
}
公共vlid图像下载(){
JSONObject json=jParser.getJSONFromUrl(url);
试一试{
JSONObject seo=json.getJSONObject(“seo”);
JSONArray folio=seo.getJSONArray(“folio”);
JSONArray image_urls1=新的JSONArray();
字符串s1=seo.getString(“Folio”);
对于(inti=0;i,如果您看到,他们已经很好地解释了异步任务

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

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

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

为了使用AsyncTask类,必须对其进行扩展并至少重写doInBackground()方法

您需要实施的最常见方法如下:

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

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

  • onProgressUpdate()
    -在doInBackground()中调用publishProgress()时调用

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

  • AsyncTask
    是一个泛型类,它使用3种类型:
    AsyncTask。

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

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


    Result
    –输出。返回doInBackground()到onPostExecute()的内容

    参考示例了解AsyncTask的泛型类型