私は、UIスレッドで何らかの種類のネットワーク要求を実行しようとするとこのエラーが発生することを認識していますが、以下のコードでわかるように、実際にはHttpをAsyncTask :android.os.NetworkOnMainThreadException in AsyncTask
public class LeftPaneFragment extends Fragment {
private ImageView _profileImage;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(wj.tweetTab.R.layout.left_pane, container);
_profileImage = (ImageView) view.findViewById(R.id.profileImage);
setUpProfileInfo(view);
return view;
}
private void setUpProfileInfo(View view) {
new SetUpUserInfo().doInBackground();
}
private class SetUpUserInfo extends AsyncTask<Void, Void, Drawable> {
@Override
protected Drawable doInBackground(Void... params) {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(_model.UserInfo.ProfileImageUrl);
InputStream inputStream = null;
try {
HttpResponse response = httpClient.execute(request);
inputStream = response.getEntity().getContent();
}
catch (Exception e) {
Log.e("setUpUserInfo.doInBackground", e.getMessage());
}
return Drawable.createFromStream(inputStream, "src");
}
@Override
protected void onPostExecute(Drawable result) {
_profileImage.setImageDrawable(result);
}
}
}
誰にも明らかな問題はありますか?メインスレッドでhttp要求を行う以外の理由でNetworkOnMainThreadException
例外をスローすることもできますか?
私はAndroidの新人です。数日で作業しています。
ああ、ありがとう、私の友人! – jcvandan
私はこれを何度も乗り越え、スレッドを使って何度もそれをやり遂げることに近づいています(開始vs.実行)。これが役に立たないときに 'doInBackground()'を利用できるのはなぜですか? –
ええと...「利用可能」とはどういう意味ですか?まず第一に、それは 'protected'です。つまり、あなたはAsyncTaskの外のクラスからそれを呼び出すことは想定されていません。残念ながら、AsyncTasksをインラインで宣言するだけで、doInBackground()を呼び出すことができます。しかし、 'execute()'は* 'public'です。 – dmon