我有包含的AsyncTask片段:的AsyncTask錯誤
class GetPharmacieDetails extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Chargement. Patienter ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Getting product details in background thread
* */
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("latitude", pid));
// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = jsonParser.makeHttpRequest(
url_product_detials, "GET", params);
// check your log for json response
Log.d("Single Product Details", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray(TAG_PRODUCT); // JSON Array
// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);
txtName.setText(product.getString(TAG_NAME));
txtRegion.setText(product.getString(TAG_REGION));
txtAddress.setText(product.getString(TAG_ADDRESS));
lati = product.getString(TAG_LATITUDE);
longi = product.getString(TAG_LANGITUDE);
}else{
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
if(pDialog != null){
pDialog.dismiss();
}
}
}
當我打開首次片段其運行良好,但是當我瀏覽到另一個片段,我返回另一個時間到它的第一個片段墜毀 登錄貓:
02-16 00:30:42.038: E/AndroidRuntime(2391): FATAL EXCEPTION: AsyncTask #5
02-16 00:30:42.038: E/AndroidRuntime(2391): java.lang.RuntimeException: An error occured while executing doInBackground()
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.lang.Thread.run(Thread.java:856)
02-16 00:30:42.038: E/AndroidRuntime(2391): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:854)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4075)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.view.View.invalidate(View.java:10386)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.view.View.invalidate(View.java:10341)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.widget.TextView.checkForRelayout(TextView.java:6439)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.widget.TextView.setText(TextView.java:3696)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.widget.TextView.setText(TextView.java:3554)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.widget.TextView.setText(TextView.java:3529)
02-16 00:30:42.038: E/AndroidRuntime(2391): at com.example.fitness2.InformationsSwipe$GetPharmacieDetails.doInBackground(InformationsSwipe.java:145)
02-16 00:30:42.038: E/AndroidRuntime(2391): at com.example.fitness2.InformationsSwipe$GetPharmacieDetails.doInBackground(InformationsSwipe.java:1)
02-16 00:30:42.038: E/AndroidRuntime(2391): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-16 00:30:42.038: E/AndroidRuntime(2391): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-16 00:30:42.038: E/AndroidRuntime(2391): ... 4 more
02-16 00:30:42.070: W/EGL_emulation(2391): eglSurfaceAttrib not implemented
02-16 00:30:42.158: E/GooglePlayServicesUtil(2391): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
我認爲這個問題在這裏:
txtName.setText(product.getString(TAG_NAME));
txtRegion.setText(product.getString(TAG_REGION));
txtAddress.setText(product.getString(TAG_ADDRESS));
lati = product.getString(TAG_LATITUDE);
longi = product.getString(TAG_LANGITUDE);
現在工作正常,謝謝;) – user3049804
歡迎您:-) –