Issue
I am basically following a tutorial for learing Android Studio that uses AsyncTask class for doing background tasks like HttpURLConnection. But the thing is that it created a lot of error and later I found out that class was deprecated. So what is the alternative? (Please provide an example code if you can)
CODE:
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);
}
}
Solution
This is an example that shows how to download an image using 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);
}
}
This is how to run it
new DownLoadImageTask(img).execute(imageUrl);
Any update is done in this method onPostExecute as it runs on the UI Thread.
Yes, You are right. AsynkTask is deprecated. You can use LoderManager and Java Executor Or Volley, Retrofit libraries
For downloading images, You can use Picasso and Gilde Libraries.
Answered By - Marwa Eltayeb
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.