2016-10-11 1 views
0

"user"という名前のjsonオブジェクトがあります。名前と電子メールの2つのフィールドがあります。 これら2つの値をトーストとして表示したいのですが、LogCatがウィンドウリークエラーを表示しています。JSONオブジェクトのリークウィンドウ

これは私のAsyncTaskクラスのコードです:

private class Data extends AsyncTask<String,String,JSONObject> 
    {ProgressDialog pd; 
     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 

      pd=new ProgressDialog(SignUp.this); 
      pd.setMessage("Loading...."); 
      pd.setCancelable(false); 

      pd.show(); 
      super.onPreExecute(); 
     } 
     @Override 
     protected JSONObject doInBackground(String... arg0) { 
      // TODO Auto-generated method stub 
      jparseLogin j=new jparseLogin(); 
      JSONObject obj= 
        j.makeHttpRequest("http://projectred.in/phploginwebservice/index.php?" + 
          "tag=register&fname="+fsname+"&lname="+lsname+"&email="+emailid+"&password="+password+"&gender="+gender+ 
          "&mobile="+mobile+"&blood_grp="+bloodgroup+"&age="+agee+"verify=0"); 

      return obj; 
     } 
     @Override 
     protected void onPostExecute(JSONObject result) { 
      TinyDB db1 = new TinyDB(SignUp.this); 
      // TODO Auto-generated method stub 
      //StringBuilder b=new StringBuilder(); 
      pd.dismiss(); 
      try{ 
       String s=result.getString("success"); 
       //String u=result.getString("uid"); 

       //db1.putString("uid",u); 
       if(s.equals("1")) 
       { JSONObject jo = result.getJSONObject("user"); 
        for(int i=0; i<5;i++) { 


         String name = jo.getString("name"); 
         String email = jo.getString("email"); 

         Toast.makeText(SignUp.this,""+name+","+email,Toast.LENGTH_LONG).show(); 
         //flag = true; 

         Intent intent = new Intent(SignUp.this, VerifyNumber.class); 
         intent.putExtra("mobile", mobile); 
         startActivity(intent); 
         SignUp.this.finish(); 
        } 
       } 


       else 
       { 
        Toast.makeText(SignUp.this, "Incorrect Email or Password....Try Again", Toast.LENGTH_LONG).show(); 
       } 
//    else 
//    { 
//     Toast.makeText(SignUp.this,"Success: "+s,Toast.LENGTH_LONG).show(); 
//    } 

      } 
      catch(JSONException e) 
      { 
       e.printStackTrace(); 
       Toast.makeText(SignUp.this,"Plz Try Again",Toast.LENGTH_LONG).show(); 
      } 

      super.onPostExecute(result); 

     } 

    } 
} 

これは私のLogCatです:

10-11 17:48:49.118 10468-10468/com.encodezero.projectred E/WindowManager: android.view.WindowLeaked: Activity com.encodezero.projectred.SignUp has leaked window com.android.internal.policy.PhoneWindow$DecorView{75b57f9 V.E...... R......D 0,0-684,232} that was originally added here 
                       at android.view.ViewRootImpl.<init>(ViewRootImpl.java:375) 
                       at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299) 
                       at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 
                       at android.app.Dialog.show(Dialog.java:319) 
                       at com.encodezero.projectred.SignUp$Data.onPreExecute(SignUp.java:208) 
                       at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604) 
                       at android.os.AsyncTask.execute(AsyncTask.java:551) 
                       at com.encodezero.projectred.SignUp$2.onClick(SignUp.java:114) 
                       at android.view.View.performClick(View.java:5207) 
                       at android.view.View$PerformClick.run(View.java:21168) 
                       at android.os.Handler.handleCallback(Handler.java:746) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5443) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
+0

あなたの問題には関係ありませんが、HTTPリクエストのために改造を使用することをお勧めします https://zeroturnaround.com/rebellabs/getting-started-with-retrofit-2/ –

+0

可能な複製:http: //stackoverflow.com/questions/11957409/activity-has-leaked-window-com-android-internal-policy-impl-phonewindowdecorvie –

答えて

0

あなたの問題は、JSONとは何の関係もありません。

問題はAsyncTaskクラスをActivity(内部クラスにする)で定義したことです。この問題は、AsyncTaskが存在する限り、ContextからActivityまでがリークすることになります。 AsyncTaskには、その親に対する暗黙の参照が含まれています。

詳細情報はfrom this Youtube videoです。 Android Developers Youtubeチャンネルから。ちなみに、すべての動画を見てください。

AsyncTaskActivityから取り出し、それを独自のファイルで定義します。

+0

WeakReferenceを使用してコンテキストを保持することができます –

関連する問題