2013-01-01 49 views
0

我卡住了,瘋了解決這個問題,但沒有運氣與我。我嘗試了所有的成員給我的指導方針,因爲我之前曾問過這個問題:(謝謝你們所有人的迴應。我搜索很多來解決它,但從來沒有成功最後的希望是,所以請指導我在哪裏出錯,以及如何我可以解決這個JSONParsing嗎?我發佈了來自PHP的數據,並希望得到它在android EditText框。我編碼,但有一些問題,從第一天存在,還沒有解決我在模擬器和電話上得到不同的LogCat錯誤我已經提出了你我的Java代碼和錯誤logcat中任何指南將是寶貴的,我仍然卡在JSONParsing問題

我的Java代碼在那裏我得到的錯誤:。

// save button 
    btnSave = (Button) findViewById(R.id.btnSave); 

    // getting product details from intent 
    Intent i = getIntent(); 

    // getting product id (pid) from intent 
    cid = i.getStringExtra(TAG_CID); 

    // save button click event 
    btnSave.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // starting background task to update product 
      new SaveTaskDetails().execute(); 
     } 
    }); 

    } 

@Override 
protected void onStart() { 
    super.onStart(); 
    // Getting complete product details in background thread 
    new GetTaskDetails().execute(); 
} 

/** 
* Background Async Task to Get complete product details 
* */ 
class GetTaskDetails extends AsyncTask<String, String, JSONObject> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     tDialog = new ProgressDialog(My_Task.this); 
     tDialog.setTitle("Please Wait"); 
     tDialog.setMessage("Retrieving Task Details."); 
     tDialog.setIndeterminate(false); 
     tDialog.setCancelable(true); 
     tDialog.show(); 

    } 

    /** 
    * Getting task details in background thread 
    * @return 
    **/ 

    protected JSONObject doInBackground(String... params1) { 

     JSONObject my_task = null; 
      // updating UI from Background Thread 
        // Check for success tag 
       int success; 
       try { 
        // Building Parameters 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("cid", cid)); 

        // getting product details by making HTTP request 
        // Note that product details url will use GET request 
        JSONObject json = JSONParser.makeHttpRequest(
          url_read_mytask, "GET", params); 

        // check your log for json response 
    //    Log.d("Single Task Details", json.toString()); 

        // json success tag 
        success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         // successfully received product details 
         JSONArray my_taskObj = json 
           .getJSONArray(TAG_MYTASK); // JSON Array 

         // get first product object from JSON Array 
         my_task = my_taskObj.getJSONObject(0); 

         } 
        else 
        { 
         // task with cid not found 

        } 
       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 


     return my_task; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 


    protected void onPostExecute(JSONObject my_task) { 
     // dismiss the dialog once got all details 
     cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txtbx); 
     try { 
      cus_name_txtbx.setText(my_task.getString(TAG_NAME)); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txtbx); 
     try { 
      contact_no_txtbx.setText(my_task.getString(TAG_CONTACT)); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txtbx); 
     try { 
      ticket_no_txtbx.setText(my_task.getString(TAG_TICKET)); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txtbx); 
     try { 
      task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL)); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   

     tDialog.dismiss(); 
    } 
} 

/** 
* Background Async Task to Save product Details 
* */ 
class SaveTaskDetails extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     tDialog = new ProgressDialog(My_Task.this); 
     tDialog.setTitle("Please Wait"); 
     tDialog.setMessage("Saving Task"); 
     tDialog.setIndeterminate(false); 
     tDialog.setCancelable(true); 
     tDialog.show(); 
    } 

    /** 
    * Saving product 
    * */ 
    protected String doInBackground(String... args) { 

     // getting updated data from EditTexts 
     String cus_name = cus_name_txtbx.getText().toString(); 
     String contact_no = contact_no_txtbx.getText().toString(); 
     String ticket_no = ticket_no_txtbx.getText().toString(); 
     String task_detail = task_detail_txtbx.getText().toString(); 

     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair(TAG_CID, cid)); 
     params.add(new BasicNameValuePair(TAG_NAME, cus_name)); 
     params.add(new BasicNameValuePair(TAG_CONTACT, contact_no)); 
     params.add(new BasicNameValuePair(TAG_TICKET, ticket_no)); 
     params.add(new BasicNameValuePair(TAG_TASKDETAIL, task_detail)); 

     // sending modified data through http request 
     // Notice that update product url accepts POST method 
     JSONObject json = JSONParser.makeHttpRequest(url_update_mytask, 
       "POST", params); 

     // check json success tag 
     try { 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // successfully updated 
       Intent i = getIntent(); 
       // send result code 100 to notify about product update 
       setResult(100, i); 
       finish(); 
      } else { 
       // failed to update product 
      } 
     } 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 product uupdated 
     tDialog.dismiss(); 
    } 
} 

我logcat的錯誤是:

01-01 11:28:52.549: E/WindowManager(31782):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-01 11:38:15.149: E/WindowManager(1133): Activity com.example.visit.record.My_Task has leaked window [email protected] that was originally added here 
01-01 11:38:15.149: E/WindowManager(1133): android.view.WindowLeaked: Activity com.example.visit.record.My_Task has leaked window [email protected] that was originally added here 
01-01 11:38:15.149: E/WindowManager(1133): at android.view.ViewRoot.<init>(ViewRoot.java:277) 
01-01 11:38:15.149: E/WindowManager(1133): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
01-01 11:38:15.149: E/WindowManager(1133): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
01-01 11:38:15.149: E/WindowManager(1133): at android.view.Window$LocalWindowManager.addView(Window.java:433) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.Dialog.show(Dialog.java:288) 
01-01 11:38:15.149: E/WindowManager(1133): at com.example.visit.record.My_Task$GetTaskDetails.onPreExecute(My_Task.java:139) 
01-01 11:38:15.149: E/WindowManager(1133): at android.os.AsyncTask.execute(AsyncTask.java:391) 
01-01 11:38:15.149: E/WindowManager(1133): at com.example.visit.record.My_Task.onStart(My_Task.java:118) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1225) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.Activity.performStart(Activity.java:3941) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 
01-01 11:38:15.149: E/WindowManager(1133): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-01 11:38:15.149: E/WindowManager(1133): at android.os.Looper.loop(Looper.java:143) 
01-01 11:38:15.149: E/WindowManager(1133): at android.app.ActivityThread.main(ActivityThread.java:4268) 
01-01 11:38:15.149: E/WindowManager(1133): at java.lang.reflect.Method.invokeNative(Native Method) 
01-01 11:38:15.149: E/WindowManager(1133): at java.lang.reflect.Method.invoke(Method.java:507) 
01-01 11:38:15.149: E/WindowManager(1133): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-01 11:38:15.149: E/WindowManager(1133): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-01 11:38:15.149: E/WindowManager(1133): at dalvik.system.NativeStart.main(Native Method) 

請親引導。 我在new GetTaskDetails()。execute();**tDialog.show();**上GetTaskDetails的PreExecute類

回答

0

的解決方案是在離開活性,例如之前調用dismiss()您在 viewP.java:183創建的對話在onPause()中。

視圖具有對其父上下文的引用(從構造函數參數中獲取)。如果你離開一個活動,而不破壞Dialogs和其他動態創建的意見,但他們仍然堅持這一參考您的活動(如果你以此爲 背景下創造的:像新的一樣ProgressDialog(this)

這樣,也不會被GC回收,導致內存泄漏

+0

我在Postexecute()中銷燬它;我在GetTaskDetail類中解僱它嗎?我在哪裏銷燬它?如果不是在postexecute? – Android

+0

@Android:GetTaskDetails.onPreExecute(My_Task.java:139)'line? –

+0

@ρяσѕρєяK:它在「tDialog.show();」 – Android

0

你在後臺運行的UI從中刪除,並在後期執行你 可以設置。(e.gcus_name_txtbx.setText(my_task.getString(TAG_NAME));)你 沒有設置它們在doIn romove每個UI進入doIn ..

+0

我編輯它。並在postExecute中調用所有editText。現在我得到了這些錯誤 – Android

+0

你得到了什麼錯誤..粘貼logcat錯誤 – QuokMoon