如何在Android Studio中使用Java在应用程序后台执行HttpURLConnection之类的任务?

问题描述

我基本上是在学习使用Studio的教程,该教程使用AsyncTask类执行诸如HttpURLConnection之类的后台任务。但事实是,它创建了很多错误,后来我发现该类已被弃用。那么替代品是什么? (请提供示例代码)

代码:

public class MainActivity extends AppCompatActivity {

    public class DownloadingTask extends AsyncTask<String,Void,String>
    {
        @Override
        protected String doInBackground(String... urls)
        {
            String result="";
            HttpURLConnection urlConnection=null;
            URL url;
            try{
                url=new URL(urls[0]);
                urlConnection=(HttpURLConnection)url.openConnection();
                InputStream in;
                in = urlConnection.getInputStream();
                InputStreamReader reader=new InputStreamReader(in);
                int data=reader.read();
                while (data!=-1)
                {
                    char current=(char) data;
                    result = result + current;
                    data=reader.read();
                }
                return result;
            }
            catch (Exception e)
            {
                e.printStackTrace();
                return "Failed";
            }

        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DownloadingTask task= new DownloadingTask();
        String s=null;
        try {
            s = task.execute("http://www.android.com/").get();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        Log.i("Msg",s);
    }
}

解决方法

这是显示如何使用AsynkTask下载图像的示例。

iota(...)

这是运行它的方式

private class DownLoadImageTask extends AsyncTask<String,Void,Bitmap> {
    ImageView imageView;

    DownLoadImageTask(ImageView imageView) {
        this.imageView = imageView;
    }

    protected Bitmap doInBackground(String... urls) {
        String urlOfImage = urls[0];
        Bitmap logo = null;
        try {
            InputStream is = new URL(urlOfImage).openStream();
            logo = BitmapFactory.decodeStream(is);
        } catch (Exception e) { // Catch the download exception
            Log.v("download",e.getMessage());

        }
        return logo;
    }

    protected void onPostExecute(Bitmap result) {
        imageView.setImageBitmap(result);
    }
}

使用onPostExecute进行此方法的任何更新都是在UI线程上运行。

是的,您是对的。不推荐使用AsynkTask。您可以使用LoderManager和Java Executor 或Volley,翻新库

要下载图像,可以使用Picasso和Gilde库。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...