2013-07-11 54 views
0

我使用AsyncTask从我的服务器获取字符串。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: [email protected] attribute=null, token = [email protected] 

代码:

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

为什么要告诉'onPostExecute()'接受'String',但是从'doInBackground()'返回'null'? – codeMagic

+0

你怎么知道你正在崩溃?堆栈跟踪或其他任何指示崩溃的消息是否有异常? – Christos

+0

我可以删除字符串,你认为这就是解决问题?我知道它崩溃,因为我在我的设备上看到它 – dasdasd

回答

1

两个潜在的问题:

  1. 正如我的评论,你告诉onPostExecute()接受String,但返回nulldoInBackground()。我不确定这会导致问题,但我从来没有尝试过。如果你不想返回任何东西可以改变

    保护无效onPostExecute(无效响应)

,改变你的类声明

class GetKey extends AsyncTask<String, Void, Void> { 

假设你传递一个String在​​当您拨打任务

2您正在呼叫finish()doInBackground()AsyncTask没有完成()方法,因此您要么完成Activity,要么在那里出错。

+0

谢谢。我删除完成并更改为AsyncTask ,它工作 – dasdasd

+0

太好了,我很高兴它的工作! – codeMagic

+0

顺便说一句,在返回null不是问题(但它是无用的)。 :) – Enrichman

0

问题是你的doInBackground()方法调用finish(),所以你以某种方式修改你的上下文并得到异常。

而不是一个字符串从结果返回整数,并在onPostExecute()完成()您的活动。

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 
     } 
    } 

}