Reputation: 325
How I can place the text below in AsyncTask
? My problem is that by placing the code directly I get an error NetworkOnMainThreadException
. I need any help please. Thanks
try {
URL myFileUrl = new URL ("http://.../cercanias.png");
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
FileOutputStream out = new FileOutputStream(getCacheDir() + "cercanias.png");
bm.compress(Bitmap.CompressFormat.PNG, 90, out);
SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(R.id.imagenNitida);
imageView.setImageFile(getCacheDir() + "cercanias.png");
out.close();
if (savedInstanceState != null &&
savedInstanceState.containsKey(STATE_SCALE) &&
savedInstanceState.containsKey(STATE_CENTER_X) &&
savedInstanceState.containsKey(STATE_CENTER_Y)) {
imageView.setScaleAndCenter(savedInstanceState.getFloat(STATE_SCALE),
new PointF(savedInstanceState.getFloat(STATE_CENTER_X),
savedInstanceState.getFloat(STATE_CENTER_Y)));
}
} catch (IOException e) {
}
Upvotes: 0
Views: 437
Reputation: 7860
Here you go: There are three steps to an AsyncTask, preExecute(), postExecute() and doInBackground. The names are self explanatory. preExecute() for everything which has to be done before execution, postExecute for everything after the execution and doInBackground for the process which is time consuming.
Simple example:
public class HeavyProcess extends AsyncTask<Void, Void, Void> {
ProgressDialog Asycdialog = new ProgressDialog(getActivity());
protected void onPostExecute(String result) {
//After execution execute this
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
//Before execution do this, like init a progress dialog
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
//Do the time consuming work here
return "";
}
}
now in your case: create a function with all your code:
public void timeTask(){
try {
URL myFileUrl = new URL ("put your URL here");
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
FileOutputStream out = new FileOutputStream(getCacheDir() + "cercanias.png");
bm.compress(Bitmap.CompressFormat.PNG, 90, out);
SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(R.id.imagenNitida);
imageView.setImageFile(getCacheDir() + "cercanias.png");
out.close();
}
} catch (IOException e) {
}
}
Then call the timeTask() function from doInBackground();
Upvotes: 0
Reputation: 609
You would just need to break this code into portions and fit them into AsyncTask :
public class checkGB_status_Async extends AsyncTask<Void, Void, Bitmap> {
@Override
protected Bitmap doInBackground(Void... params) {
try {
URL myFileUrl = new URL ("http://.../cercanias.png");
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
return bm;
} catch (IOException e) {
}
}
protected void onPostExecute(Bitmap result) {
FileOutputStream out = new FileOutputStream(getCacheDir() + "cercanias.png");
result.compress(Bitmap.CompressFormat.PNG, 90, out);
SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(R.id.imagenNitida);
imageView.setImageFile(getCacheDir() + "cercanias.png");
out.close();
if (savedInstanceState != null &&
savedInstanceState.containsKey(STATE_SCALE) &&
savedInstanceState.containsKey(STATE_CENTER_X) &&
savedInstanceState.containsKey(STATE_CENTER_Y)) {
imageView.setScaleAndCenter(savedInstanceState.getFloat(STATE_SCALE),
new PointF(savedInstanceState.getFloat(STATE_CENTER_X),
savedInstanceState.getFloat(STATE_CENTER_Y)));
}
}
Upvotes: 0
Reputation: 28484
Do this way
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... arg0) {
try {
URL myFileUrl = new URL("http://.../cercanias.png");
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
FileOutputStream out = new FileOutputStream(getCacheDir() +File.separator+ "cercanias.png");
bm.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
conn.disconnect();
bm.recycle();
return "cercanias.png";
} catch (IOException e) {
}
return null;
}
protected void onPostExecute(String result) {
if (result != null) {
SubsamplingScaleImageView imageView = (SubsamplingScaleImageView) findViewById(R.id.imagenNitida);
imageView.setImageFile(getCacheDir() +File.separator+ result);
if (savedInstanceState != null && savedInstanceState.containsKey(STATE_SCALE) && savedInstanceState.containsKey(STATE_CENTER_X)
&& savedInstanceState.containsKey(STATE_CENTER_Y)) {
imageView.setScaleAndCenter(savedInstanceState.getFloat(STATE_SCALE),
new PointF(savedInstanceState.getFloat(STATE_CENTER_X), savedInstanceState.getFloat(STATE_CENTER_Y)));
}
}
};
}.execute();
Upvotes: 0
Reputation: 616
class TestAsyncTask extends AsyncTask<String, Integer, Integer> {
protected Integer doInBackground(String... strings) {
// Long running task - say processing of each passed string
URL myFileUrl = new URL ("http://.../cercanias.png");
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
FileOutputStream out = new FileOutputStream(getCacheDir() + "cercanias.png");
bm.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
return 0;
}
protected void onPostExecute(Integer result){
Log.d("TestP", "AsyncTask returned : " + result);
SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(R.id.imagenNitida);
imageView.setImageFile(getCacheDir() + "cercanias.png");
if (savedInstanceState != null &&
savedInstanceState.containsKey(STATE_SCALE) &&
savedInstanceState.containsKey(STATE_CENTER_X) &&
savedInstanceState.containsKey(STATE_CENTER_Y)) {
imageView.setScaleAndCenter(savedInstanceState.getFloat(STATE_SCALE),
new PointF(savedInstanceState.getFloat(STATE_CENTER_X),
savedInstanceState.getFloat(STATE_CENTER_Y)));
}
}
Upvotes: 2