android studioを使ってandroidアプリ開発の勉強をしているものです。
本に書いてあるプログラムを見ながら勉強しているのですが、AsyncTaskのdoInBackgroundメソッド内でgetTag();を使っているのでその通りに記述してみると、Method getTag must be called from the UI threadという警告が出ます。
UIスレッドでしか使えないよ、というような警告であると解釈したのですが、本の内容が間違っているのでしょうか。それとも何か別に原因があるのでしょうか。
ImageLoaderTask.java
Webから画像の読み込みを行うクラスです。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.widget.ImageView;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import java.io.IOException;
public class ImageLoaderTask extends AsyncTask<ImageView, Void, Bitmap> {
private static final String USER_AGENT = "WeatherForecasts Sample";
private final Context context; Exception exception; ImageView imageView; public ImageLoaderTask(Context context) { this.context = context; } @Override protected Bitmap doInBackground(ImageView... params) { imageView = params[0]; String url = (String) imageView.getTag(); /*ここに警告が出る*/ try { return getImage(context, url); } catch (IOException e) { exception = e; } return null; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null) { imageView.setImageBitmap(bitmap); } } private static Bitmap getImage(Context context, String url) throws IOException { AndroidHttpClient client = AndroidHttpClient.newInstance(USER_AGENT, context); HttpGet get = new HttpGet(url); try { HttpResponse response = client.execute(get); return BitmapFactory.decodeStream(response.getEntity().getContent()); } finally { client.close(); } }
}
回答1件
あなたの回答
tips
プレビュー