Tôi nhận thấy rằng lỗi này xảy ra khi bạn cố gắng thực hiện một số yêu cầu mạng trên chuỗi giao diện người dùng, nhưng như bạn có thể thấy trong mã bên dưới, tôi thực sự gọi Http Get trong AsyncTask :android.os.NetworkOnMainThreadException trong 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);
}
}
}
Có ai có thể thấy bất kỳ vấn đề rõ ràng nào ở đây không? Ngoài ra, ngoại lệ NetworkOnMainThreadException
có thể bị ném vì bất kỳ lý do nào khác ngoài việc thực hiện yêu cầu http trong chuỗi chính không?
Tôi là người mới đến Android, chỉ làm việc với nó một vài ngày.
Aha cảm ơn bạn của tôi! – jcvandan
Tôi đã vấp phải điều này nhiều lần, và đã gần gũi với nó nhiều lần hơn với các chủ đề (Bắt đầu và chạy). Tại sao 'doInBackground()' thậm chí có sẵn khi nó vô ích này? –
Uh ... ý của bạn là "có sẵn"? Trước hết, nó được 'bảo vệ', có nghĩa là bạn không được gọi nó từ một lớp bên ngoài AsyncTask. Thật không may, nhiều người chỉ khai báo nội tuyến AsyncTasks để họ có thể (và thực hiện) gọi 'doInBackground()'. 'execute()' tuy nhiên, * là * 'public'. – dmon