2013-01-01 50 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