2012-10-09 52 views
4

我是新来的Android,我只有7天前才开始。我遇到了这种类型的错误,并且在同一个论坛中也提到了大部分的主题,并提出了类似的问题,但没有得到解决。MainActivity已泄露窗口

这里是我的代码:

class CreateNewCustomer extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
       super.onPreExecute(); 
       pDialog = new ProgressDialog(MainActivity4.this); 
       pDialog.setMessage("Creating Customer.."); 
       pDialog.setIndeterminate(false); 
       pDialog.setCancelable(true); 
       pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String...args) { 
       String fname = inputFName.getText().toString(); 
       String lname = inputLName.getText().toString(); 
       String phone = inputPhone.getText().toString(); 

       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("fname", fname)); 
       params.add(new BasicNameValuePair("lname", lname)); 
       params.add(new BasicNameValuePair("phone", phone)); 
       JSONObject json = jsonParser.makeHttpRequest(url_create_customer, 
                  "POST", params); 
       Log.d("Create Response", json.toString()); 

       try { 
         int success = json.getInt(TAG_SUCCESS); 
         if (success == 1) { 
           Intent i = new Intent(getApplicationContext(),MainActivity5.class); 
           startActivity(i); 
           finish(); 
         } else { 
           // This is the Else part 
         } 
       } catch (JSONException e) { 
         e.printStackTrace(); 
       } 
       return null; 
     } 

     @Override 
     protected void onPostExecute(String file_url) { 
       pDialog.dismiss(); 
     } 

} 
+0

这种错误来当你创建一个弹出式对话框或某种窗口,然后不删除进度对话框后,它和你的活动closes.What是你的场景?你能否增加一些解释。 –

+0

尝试检查progressdialog.isshowing()是否显示和解散时。 – darshanz

回答

3

在这一部分:

if (success == 1) { 
    Intent i = new Intent(getApplicationContext(), 
          MainActivity5.class); 
    startActivity(i); 
    finish(); 
} 

你打电话finish()你需要关闭该进度对话框之前。它并没有被解雇,因此这个窗口正在泄露,并导致一个例外。

使用此代码来代替:

if (success == 1) { 
    Intent i = new Intent(getApplicationContext(), MainActivity5.class); 
    startActivity(i); 
    pDialog.dismiss(); 
    finish(); 
} 

此外,从onPostExecute(),不doInBackground()启动新的活动。使用标志来检查你的活动成功,并开始了新的活动onPostExecute()这样的:

@Override 
protected String doInBackground(String...args) { 
    //... 
    if (success == 1) { 
     successFlag=true; 
    } 
    //... 

} 

@Override 
protected void onPostExecute(String file_url) { 
    if(successFlag=true) { 
     Intent i = new Intent(getApplicationContext(), MainActivity5.class); 
     startActivity(i); 
     pDialog.dismiss(); 
     finish(); 
    } 
} 
+0

你好,谢谢,但仍然没有工作..它正在停止我的应用程序像以前一样..任何其他建议..? –

+0

你好Anup Cowkur ..非常感谢你..它正在工作..但有一个问题抱歉..有些时候它工作正常,有些时候它给错误相同..为什么它发生..你可以给任何建议.. ??正如昨天面临同样的问题并感到沮丧......那么当时该怎么办?有些时间工作,有些时候给同样的错误,并停止应用程序.. :( 因为它发生在一段时间..它不工作..和重新启动后,它的工程没有停止的应用程序..所以任何帮助将是伟大的我.. –

+1

对于你提供的代码,我的解决方案是正确的,我相信,请发布任何更多的错误,你作为另一个问题,以便我们可以帮助你,它也会帮助别人。 :-) –

0

在doInBackground决不做一个startActivity()。

执行startActivity您驳回onPostExecute()

+0

我已经做了同样的..已经从尝试块删除开始活动,并在关闭对话框后添加到onPostExecute ...但它不能帮助应用程序像以前一样停止.. :( –

+0

日志说什么? – nithinreddy

相关问题