这是我的Fragment中的AsyncTask类,当我点击片段时,我收到此错误: NetworkOnMainThread异常(我无法发布图片,因为我的声誉不够高)
private class me extends AsyncTask<Object,Void,Boolean>{
DisplayMetrics dm = new DisplayMetrics();
protected void onPreExecute(){
String sess = SignIn.giveSession().getSession().getToken();
deviceId = device.getDeviceId();
data = RestQuery.profileImage(sessionToken, deviceId, username);
bm = BitmapFactory.decodeByteArray(data,0,data.length);
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
username = reWiPr.getName();
}
protected Boolean doInBackground(Object... stuff){
if(reWiPr == null){
return false;
}
return true;
}
protected void onPostExecute(Boolean results){
if(results){
image.setMinimumHeight(dm.heightPixels);
image.setMinimumWidth(dm.widthPixels);
image.setImageBitmap(bm);
uName.setText(reWiPr.getName());
rName.setText(reWiPr.getRealName());
safety.setText("Safety: " + reWiPr.getRating().getSafe());
time.setText("Time: " + reWiPr.getRating().getTime());
courteous.setText("Courteous: " + reWiPr.getRating().getCourteous());
cleanliness.setText("Cleanliness: " + reWiPr.getRating().getClean());
overall.setText("Overall: " + reWiPr.getRating().getOverall());
average.setText("Average: " + reWiPr.getRating().getAverage());
ve.setText("Vehicles: " + reWiPr.getVehicle() );
}
}
我该如何解决这个问题?我需要这个AsyncTask来使片段工作,我在onCreate()方法中执行它。任何帮助将不胜感激。*
答案 0 :(得分:3)
您没有使用正确的方法进行网络通话。您必须立即转移doInBackground
中的onPreExecute
网络电话。
来自文档:
执行异步任务时,任务将经历4个步骤:
- onPreExecute(),在任务之前在UI线程上调用 执行。例如,此步骤通常用于设置任务 通过在用户界面中显示进度条。
- doInBackground(Params ...),在后台线程上调用 在onPreExecute()完成执行后立即执行。这一步是 用于执行可能需要很长时间的后台计算。 异步任务的参数将传递给此步骤。该 计算结果必须由此步骤返回并且将是 回到最后一步。这一步也可以使用 publishProgress(Progress ...)发布一个或多个单元 进展。这些值发布在UI线程中 onProgressUpdate(Progress ...)步骤。
- onProgressUpdate(Progress ...),在调用后在UI线程上调用 发布进度(进度......)。执行的时间是 未定义。此方法用于显示任何形式的进度 后台计算仍然是用户界面 执行。例如,它可用于为进度条设置动画或 在文本字段中显示日志。
- onPostExecute(Result),在后台后的UI线程上调用 计算结束。背景计算的结果是 作为参数传递给此步骤。
醇>
答案 1 :(得分:0)
您需要使用doInBackground
方法执行网络任务。目前,您在onPreExecute
中运行GUI线程。