2014-11-28 3 views
-1

웹 서비스 소비를 처리하기 위해 비동기 작업을 사용하는 활동이 있지만 버튼을 클릭하거나 활동을 입력 할 때 오류가 발생합니다. ProgressDialog가 닫히지 않는 것 같습니다. 여기에 실종 됐어? 어떤 아이디어라도 도움이 될 것입니다!나를 미치게하는 WindowLeaked 오류

오류 로그 :

11-28 08:24:28.589: E/WindowManager(20301): android.view.WindowLeaked: Activity com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{45400170 G.E..... R.....ID 0,0-180,180} that was originally added here 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:436) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.Dialog.show(Dialog.java:288) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.login.util.CustomProgressDialog.show(CustomProgressDialog.java:41) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity$asyncGetTaskClass.onPreExecute(TaskFactoryRateTasksActivity.java:84) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.AsyncTask.execute(AsyncTask.java:535) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity.onCreate(TaskFactoryRateTasksActivity.java:44) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.Activity.performCreate(Activity.java:5389) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread.access$800(ActivityThread.java:163) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.Looper.loop(Looper.java:157) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread.main(ActivityThread.java:5335) 
11-28 08:24:28.589: E/WindowManager(20301):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 08:24:28.589: E/WindowManager(20301):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
11-28 08:24:28.589: E/WindowManager(20301):  at dalvik.system.NativeStart.main(Native Method) 
11-28 08:24:28.589: E/WindowManager(20301): android.view.WindowLeaked: Activity com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{45428730 G.E..... R.....ID 0,0-180,180} that was originally added here 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:436) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.Dialog.show(Dialog.java:288) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.login.util.CustomProgressDialog.show(CustomProgressDialog.java:41) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity$asyncRateClass.onPreExecute(TaskFactoryRateTasksActivity.java:156) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.AsyncTask.execute(AsyncTask.java:535) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity.asyncRateTask(TaskFactoryRateTasksActivity.java:64) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.roneskinder.selfierush.activity.TaskFactoryRateTasksActivity$2.onClick(TaskFactoryRateTasksActivity.java:58) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.View.performClick(View.java:4630) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.view.View$PerformClick.run(View.java:19339) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.Handler.handleCallback(Handler.java:733) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.Handler.dispatchMessage(Handler.java:95) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.os.Looper.loop(Looper.java:157) 
11-28 08:24:28.589: E/WindowManager(20301):  at android.app.ActivityThread.main(ActivityThread.java:5335) 
11-28 08:24:28.589: E/WindowManager(20301):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 08:24:28.589: E/WindowManager(20301):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
11-28 08:24:28.589: E/WindowManager(20301):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
11-28 08:24:28.589: E/WindowManager(20301):  at dalvik.system.NativeStart.main(Native Method) 

활동 :

package com.roneskinder.selfierush.activity; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.roneskinder.selfierush.login.R; 
import com.roneskinder.selfierush.login.util.CustomProgressDialog; 
import com.roneskinder.selfierush.login.util.UserFunctions; 

public class TaskFactoryRateTasksActivity extends Activity { 

    public static final String TAG_GETTASK = "getRateTask"; 
    public static final String TAG_RATETASK = "RateTask"; 

    protected TextView taskDescription, taskDescriptionExtra, taskScore; 
    protected Button btn_like, btn_dislike; 

    public String idtask, description, description_extra, score, rate, message, response; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.task_factory_ratetask_layout); 

     taskDescription = (TextView) findViewById(R.id.taskDescription); 
     taskDescriptionExtra = (TextView) findViewById(R.id.taskDescriptionExtra); 
     taskScore = (TextView) findViewById(R.id.taskScore); 

     btn_like = (Button) findViewById(R.id.btn_like); 
     btn_dislike = (Button) findViewById(R.id.btn_dislike); 

     new asyncGetTaskClass(this).execute(); 

     // Like 
     btn_like.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       rate = "1"; 
       asyncRateTask(v); 
      } 
     }); 

     // Like 
     btn_dislike.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       rate = "0"; 
       asyncRateTask(v); 
      } 
     }); 
    } 

    public void asyncRateTask(View v) { 
     new asyncRateClass(this).execute(); 
    } 

    public void setTextViews(){ 
     taskDescription.setText(description); 
     taskDescriptionExtra.setText(description_extra); 
     taskScore.setText(score); 
    } 

    class asyncGetTaskClass extends AsyncTask<Void, Void, Void> { 
     private final ProgressDialog progressDialog; 

     public asyncGetTaskClass(Context ctx) { 
      progressDialog = CustomProgressDialog.ctor(ctx); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // sleep for 5 seconds 
      UserFunctions userFunction = new UserFunctions(); 
      JSONObject json = userFunction.getRateTask(); 


      try { 

       // news found 
       // Getting Array of News 
       JSONArray emailLogin = json.getJSONArray(TAG_GETTASK); 
       // Log.d("JSON", "NEWS: " + news); 

       if (emailLogin != null) { 
        // looping through All News 
        for (int i = 0; i < emailLogin.length(); i++) { 
         JSONObject c = emailLogin.getJSONObject(i); 

         // Storing each json item in variable 
         idtask = c.getString("idtask"); 
         description = c.getString("description"); 
         description_extra = c.getString("description_extra"); 
         score = c.getString("score"); 

         Log.d("TASK INFO", "Task:" + idtask + "\ndescription:" + description + "\ndescription_extra:" + idtask + "\nscore:" + score); 

        } 

       } else { 
        // Check your log cat for JSON reponse 
        Log.d("Login empty: ", json.toString()); 
       } 

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

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      try { 
       if (null != progressDialog && progressDialog.isShowing()) { 
        progressDialog.hide(); 
       } 
       setTextViews(); 


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

     } 
    } 

    class asyncRateClass extends AsyncTask<Void, Void, Void> { 
     private final ProgressDialog progressDialog; 

     public asyncRateClass(Context ctx) { 
      progressDialog = CustomProgressDialog.ctor(ctx); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // sleep for 5 seconds 
      UserFunctions userFunction = new UserFunctions(); 
      JSONObject json = userFunction.RateTask(rate, idtask); 

      try { 

       // news found 
       // Getting Array of News 
       JSONArray emailLogin = json.getJSONArray(TAG_RATETASK); 
       // Log.d("JSON", "NEWS: " + news); 

       if (emailLogin != null) { 
        // looping through All News 
        for (int i = 0; i < emailLogin.length(); i++) { 
         JSONObject c = emailLogin.getJSONObject(i); 

         // Storing each json item in variable 
         response = c.getString("response"); 
         message = c.getString("message"); 

         Log.d("TASK INFO", "response:" + response + "\nmessage:" + message); 

        } 

       } else { 
        // Check your log cat for JSON reponse 
        Log.d("Login empty: ", json.toString()); 
       } 

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

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      try { 
       if (null != progressDialog && progressDialog.isShowing()) { 
        progressDialog.hide(); 
       } 
       if(response.equals("1")){ 
        Intent intent = new Intent(getBaseContext(), TaskFactoryMenuActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        intent.putExtra("response", "2"); 
        startActivity(intent); 
       } 
       else{ 
        Intent intent = new Intent(getBaseContext(), TaskFactoryMenuActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        intent.putExtra("response", "3"); 
        startActivity(intent); 
       } 

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

     } 
    } 
} 
+0

CustomProgressDialog 클래스 게시 – k0sh

답변

2

당신은 progressDialog.dismiss() 대신 progressDialog.hide() 호출해야합니다.

dismiss() :

화면에서 제거,이 대화 상자를 해제 둘 사이에 미묘한 차이가 있습니다.

hide() :

대화 상자를 숨기기 만 해고하지 않습니다.

대화 상자가 더 이상 필요하지 않으면 대화 상자가 침대 아래에 숨겨져 있지 않을 수 있습니다. 대화 상자를 숨기지 않고 닫을 수 있습니다. : P

+0

젠장! 너무 간단해서, 나는 잠을 좀 자야했다. – RonEskinder

관련 문제