我正在使用AsyncTask从我的服务器获取字符串。
我的问题是AsyncTask完成后我的主线程崩溃了,应用程序是
加载上一个窗口。
奇怪的是我没有在我的logcat中获取任何错误代码。
感谢帮助。
这是我的代码和logcat:
07-12 00:58:51.162: I/ActivityManager(1834): START u0 {cmp=com.tomer.workoutlog/com.example.workoutlog.AddWorkOutPage (has extras)} from pid 28701
07-12 00:58:51.182: D/AudioHardwareMSM7X30(1489): do_aic3254_control device: 1 mode: 0 record: 0
07-12 00:58:51.182: D/AudioHardwareMSM7X30(1489): aic3254_ioctl: new_aic_rxmode 13 cur_aic_rx 29
07-12 00:58:51.182: D/AudioHardwareMSM7X30(1489): aic3254_ioctl()
07-12 00:58:51.182: D/AudioHardwareMSM7X30(1489): aic3254_ioctl: try ioctl 0x40047313 with arg 13
07-12 00:58:51.192: D/AudioHardwareMSM7X30(1489): aic3254_ioctl: new_aic_txmode 29 cur_aic_tx 29
07-12 00:58:51.192: D/AudioHardwareMSM7X30(1489): value of device and enable is 6 1 ALSA dev id:6
07-12 00:58:51.232: D/AudioHardwareMSM7X30(1489): updateACDB: (11, 6, 0, 607)
07-12 00:58:51.232: I/HTC Acoustic(1489): update ACDB id: (tx, rx, tx_acdb, rx_acdb) = (11, 6, 0, 607)
07-12 00:58:51.232: D/AudioHardwareMSM7X30(1489): msm_route_stream(PCM_PLAY,5,6,1)
07-12 00:58:51.652: I/ActivityManager(1834): Displayed com.tomer.workoutlog/com.example.workoutlog.AddWorkOutPage: +474ms
07-12 00:58:52.033: W/InputMethodManagerService(1834): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41948370 attribute=null, token = android.os.BinderProxy@415ff880
代码:
class GetKey extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AddWorkOutPage.this);
pDialog.setMessage("loading...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
* */
protected String doInBackground(String... args) {
JSONParser jsonParser = new JSONParser();
JSONObject json = null;
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("exercise", exercise));
json = jsonParser.makeHttpRequest(url_get_key,"GET", params);
try {
base64EncodedPublicKey = json.getString("key");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
//Log.d("ok", json.toString());
// closing this screen
finish();
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
答案 0 :(得分:1)
两个潜在的问题:
在我的评论中,您告诉onPostExecute()
接受String
,但在null
中返回doInBackground()
。我不确定这会导致问题,但我从未尝试过。如果您不想退回任何内容,可以更改为
protected void onPostExecute(Void response)
并将您的班级声明更改为
class GetKey extends AsyncTask<String, Void, Void> {
假设您在调用任务时在String
传递了execute()
2您在finish()
中呼叫doInBackground()
,但AsyncTask
没有finish()方法,因此您要么完成Activity
,要么在那里收到错误。< / p>
答案 1 :(得分:0)
问题是你从doInBackground()方法调用finish(),所以你要以某种方式修改你的上下文并获得异常。
而不是String返回结果中的Integer,并在onPostExecute()中完成()你的Activity。
class GetKey extends AsyncTask<String, String, Integer> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AddWorkOutPage.this);
pDialog.setMessage("loading...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
* */
protected Integer doInBackground(String... args) {
JSONParser jsonParser = new JSONParser();
JSONObject json = null;
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("exercise", exercise));
json = jsonParser.makeHttpRequest(url_get_key,"GET", params);
try {
base64EncodedPublicKey = json.getString("key");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// check for success tag
int success = 0;
try {
success = json.getInt(TAG_SUCCESS);
} catch (JSONException e) {
e.printStackTrace();
}
return success;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(Integer success) {
pDialog.dismiss();
if (success == 1) {
// successfully created product
//Log.d("ok", json.toString());
// closing this screen
finish();
} else {
// failed to create product
}
}
}