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

Posted

技术标签:

【中文标题】如何在Android Studio中使用Java的应用程序后台执行HttpURLConnection之类的任务?【英文标题】:How to do tasks like HttpURLConnection in the background of a app using Java in Android Studio? 【发布时间】:2020-12-03 13:34:40 【问题描述】:

我基本上是在学习使用 AsyncTask 类执行 HttpURLConnection 等后台任务的 android Studio 教程。但问题是它产生了很多错误,后来我发现该类已被弃用。那么替代方案是什么? (如果可以,请提供示例代码)

代码:

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

【问题讨论】:

请向我们展示您的代码 @JCWasmx86 在这里。你能帮忙吗? 【参考方案1】:

这是一个展示如何使用 AsynkTask 下载图像的示例。

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

这是如何运行的

new DownLoadImageTask(img).execute(imageUrl);

在此方法 onPostExecute 中完成任何更新,因为它在 UI 线程上运行。

是的,你是对的。 AsynkTask 已弃用。你可以使用 LoderManager 和 Java Executor 或者 Volley,改造库

要下载图片,您可以使用 Picasso 和 Gilde Libraries。

【讨论】:

以上是关于如何在Android Studio中使用Java的应用程序后台执行HttpURLConnection之类的任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android Studio开发/调试Android源码

如何编译 netty 源码并导入android studio

如何在 android studio (java) 中清除通知

如何使用 Java Native Interface 在 C++ 中导入 python 库 - Android Studio

如何在 android studio 中使用 setSupportActionBar 功能?

Android Studio中如何自定义文件类头?