30/09/2018, 21:24
Hỏi về async trong Android
Xin chào mọi người, mình đang học lập trình android qua mạng, tới clip này:
Thì khi mình làm theo, bị báo lỗi ngay tại dòng Image.setImageBitmap(Bmp); mọi người xem giúp mình với.
Code của mình như sau:
package com.example.lenghia.asyn;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image=(ImageView)findViewById(R.id.hinhlogo);
runOnUiThread(new Runnable() {
@Override
public void run() {
new LoadImageformInternet().execute("http://9mobi.vn/cf/images/2015/03/nkk/hinh-dep-1.jpg");
}
});
}
private class LoadImageformInternet extends AsyncTask<String,Integer,String>{
@Override
protected String doInBackground(String... params) {
try {
URL u=new URL(params[0]);
Bitmap Bmp=BitmapFactory.decodeStream(u.openConnection().getInputStream());
image.setImageBitmap(Bmp);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
Ngoài ra, mọi người có thể nói rõ hơn về ý nghĩa và cách dùng async được không? Chứ mình vẫn không hiểu lắm. Xin cảm ơn.
Bài liên quan
Không đưa lỗi lên, ai mà giúp. Úp lỗi lên.
Cơ mà lỗi là thế này:
Đang dùng asnyc có nghĩa là xử lý bất đồng bộ, hàm doInBackground đang xử lý, chư biết khi nao xong mà set vao image làm gì.
Image nằm trên UI nên overide hàm này:
hình tham khảo:
ref: https://developer.android.com/reference/android/os/AsyncTask.html?hl=vi
Làm gì cũng vậy, nến đọc qua lý thuyết trước. Step by step từng bước hướng dẫn trên mạng cũng không tốt.
cái image.setImageBitmap(Bmp); bạn phải “do on UI theard” chứ không được đặt trong hàm “doInBackground”. Bạn nên đọc lại về AsynTask ở đây https://developer.android.com/reference/android/os/AsyncTask.html.
Đặc biệt chú ý phần “The 4 steps”
đại khái là trong doInBackground không được thay đổi giao diện, chỉ tính toán logic thôi.