Как выполнять задачи, подобные HttpURLConnection, в фоновом режиме приложения, использующего Java в Android Studio?

#java #android #android-studio #android-asynctask #httpurlconnection

#java #Android #android-studio #android-asynctask #httpurlconnection

Вопрос:

Я в основном следую руководству по изучению Android 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 resu<
            }
            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);
    }
}
  

Комментарии:

1. Пожалуйста, покажите нам свой код

2. @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 при запуске в потоке пользовательского интерфейса.

Да, вы правы. AsynkTask устарел. Вы можете использовать LoderManager и Java Executor или Volley, модифицированные библиотеки

Для загрузки изображений вы можете использовать библиотеки Picasso и Gilde.