2013-05-16 2 views
0

내 응용 프로그램에 Tab을 구현하려고합니다. 그래서 저는 어린이 활동으로 활동을 시작해야합니다. 그러나 어떤 어린이 활동을 시작할 때 문제가 발생하지만 다른 활동은 시작되지 않습니다. 어쩌면 그 활동에 뭔가가있을 수 있습니다. 두 가지를 비교할 때 오류가 발생한 다른 부분은 비동기 작업을 실행하고 있습니다. 어쩌면 그것이 원인 일 수 있습니다.AsyncTask를 사용하여 활동을 자식 활동으로 시작하기

05-16 18:21:00.475: E/AndroidRuntime(1572): FATAL EXCEPTION: main 
    05-16 18:21:00.475: E/AndroidRuntime(1572): java.lang.IllegalStateException: Could not execute method of the activity 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.View$1.onClick(View.java:3044) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.View.performClick(View.java:3511) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.View$PerformClick.run(View.java:14105) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.os.Handler.handleCallback(Handler.java:605) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.os.Handler.dispatchMessage(Handler.java:92) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.os.Looper.loop(Looper.java:137) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ActivityThread.main(ActivityThread.java:4446) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at java.lang.reflect.Method.invokeNative(Native Method) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at java.lang.reflect.Method.invoke(Method.java:511) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at dalvik.system.NativeStart.main(Native Method) 
    05-16 18:21:00.475: E/AndroidRuntime(1572): Caused by: java.lang.reflect.InvocationTargetException 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at java.lang.reflect.Method.invokeNative(Native Method) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at java.lang.reflect.Method.invoke(Method.java:511) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.View$1.onClick(View.java:3039) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  ... 11 more 
    05-16 18:21:00.475: E/AndroidRuntime(1572): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.project/com.test.project.ProductActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1978) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1819) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ParentTabActivity.startChildActivity(ParentTabActivity.java:276) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ActivityGroup.showInvoice4(ActivityGroup.java:34) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  ... 14 more 
    05-16 18:21:00.475: E/AndroidRuntime(1572): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:513) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.view.Window$LocalWindowManager.addView(Window.java:537) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.Dialog.show(Dialog.java:278) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ProgressDialog.show(ProgressDialog.java:116) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ProgressDialog.show(ProgressDialog.java:99) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ProgressDialog.show(ProgressDialog.java:94) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ProductActivity$BusinessIdListRequestForEverything2.onPreExecute(ProductActivity.java:2984) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.os.AsyncTask.execute(AsyncTask.java:511) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ProductActivity.initialPopulateAllShop(ProductActivity.java:2501) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ProductActivity.populateData3(ProductActivity.java:2408) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at com.test.project.ProductActivity.onCreate(ProductActivity.java:250) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.Activity.performCreate(Activity.java:4465) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1942) 
    05-16 18:21:00.475: E/AndroidRuntime(1572):  ... 19 more 

어떤 깨달음이 문제에 대한이 내 로그의 말씀입니다. 어떤 도움이라도 대단히 감사합니다.

감사

[편집 : 내 코드]

이 내 MainActivity :

TabSpec clipBoard = tabHost.newTabSpec("FirstActivity"); 
      Intent firstIntent = new Intent(this, GroupTabActivity.class); 

      clipBoard.setIndicator(view1); 
      clipBoard.setContent(firstIntent); 

      TabSpec photos = tabHost.newTabSpec("ProductActivity"); 
      Intent secondIntent = new Intent(this, GroupTabActivity.class); 
      photos.setIndicator(view2); 
      photos.setContent(secondIntent); 

그런 다음 GroupTabActivity extends TabParentActivity TabParentActivity는 마지막으로 ActivityGroup

public class GroupTabActivity extends ParentTabActivity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Log.d("## this1", getParent().getClass().getSimpleName()); 
      startChildActivity("ActivityGroup", new Intent(this,ActivityGroup.class)); 
     } 

그리고 확장 ActivityGroup extends TabParentActivity

,536,913,632 10
 public void onButtonClick1(View v){ 
      Intent intent = new Intent(getParent(), FirstActivity.class); 
      TabParentActivity parentActivity = (TabParentActivity)getParent(); 
      parentActivity.startChildActivity("FirstActivity", intent); 
      } 
     public void onButtonClick2(View v){ 
      Intent intent = new Intent(getParent(), ProductActivity.class); 
      TabParentActivity parentActivity = (TabParentActivity)getParent(); 
      parentActivity.startChildActivity("ProductActivity", intent); 

     } 

그것은 나 그 오류 발생 onclick2 후이다. ProductActivity는 asynctask를 포함합니다. 로그에서

, 줄 2984 : ProductActivity에서 :

@Override 
    protected void onPreExecute() { 
     if (mainProgressDialog == null){ 
      mainProgressDialog = ProgressDialog.show(ProductActivity.this, "", getString(R.string.loading)); 
     }else{ 
      if (mainProgressDialog.isShowing()==false){ 
       mainProgressDialog = ProgressDialog.show(ProductActivity.this, "", getString(R.string.loading)); 
      } 
     } 
     super.onPreExecute(); 
    } 

UPDATE : AsyncTask를 : 이미 파괴 Activity에 대화 상자를 표시 할 때

private class BusinessIdListRequestForEverything2 extends AsyncTask<String, Void, String>{ 
     ApiService service; 
     String mode = ""; //either all or shop 
     String indicator = ""; 
     List <BusinessDetailsRequestForEverything2> businessRequestList = null; 
     int numberOfBusinessRequests = 0; 

     public String getIndicator() { 
      return indicator; 
     } 
     public void setIndicator(String indicator) { 
      this.indicator = indicator; 
     } 

     public ApiService getService() { 
      return service; 
     } 
     public void setService(ApiService service) { 
      this.service = service; 
     } 
     public BusinessIdListRequestForEverything2(ApiService service){ 
      this.service = service; 
      businessRequestList = new ArrayList<BusinessDetailsRequestForEverything2>(); 
     } 
     @Override 
     protected String doInBackground(String... params) { 
      service.execute(RequestMethod.POST); 
      return null; 
     } 

     /** 
     * checks all getBusiness api requests if finished 
     * 
     * @return 
     */ 
     public boolean isBusinessRequestsFinished(){ 
      boolean retVal = false; 
      int counter = 0; 
      if (businessRequestList!=null && businessRequestList.size()>0){ 
       for(BusinessDetailsRequestForEverything2 request: businessRequestList){ 
        if (request.getStatus()==AsyncTask.Status.FINISHED){ 
         counter++; 
        } 
       } 
       if (counter == numberOfBusinessRequests){ 
        retVal = true; 
       } 
      } 
      return retVal; 
     } 

     public void stopAllBusinessDetailsRequestEverything(){ 
      if (businessRequestList!=null && businessRequestList.size()>0){ 
       for(BusinessDetailsRequestForEverything2 request: businessRequestList){ 
        if (request.getStatus()==AsyncTask.Status.RUNNING){ 
         request.cancel(true); 
        } 
       } 
      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      try{ 
       String response = service.getResponse(); 
       if (response!=null){ 
       Log.d("fritz", "BusinessIdListRequestForEverything response is "+response); 
        JSONObject jsonObject = new JSONObject(service.getResponse()); 
        JSONObject project = jsonObject.getJSONObject("project"); 
        JSONArray jsonArray = project.getJSONArray("shops"); 
        if (jsonArray.length() > 0) { 
         getBusinessIdListRequestForEverythingCounter=0; 
         getBusinessIdListRequestForEverythingBusinessCount = jsonArray.length(); 
         numberOfBusinessRequests = jsonArray.length(); 
         //clear the businessRequestList 
         businessRequestList.clear(); 
         //increment offset by limit 
         getBusinessIdOffset += getBusinessIdLimit; 
         //empty the businessRequestList 
         for (int x = 0; x < jsonArray.length(); x++) { 
          JSONObject temp = jsonArray.getJSONObject(x); 
          Log.d("fritz", "business id =" + temp.getInt("id")); 
          //getBusiness(temp.getInt("id")); 
          //call getBusiness api 
          MottocoApi projectApi = application.getMottocoApiFactory(); 
          ApiService getBusiness = projectApi.getApi("getBusiness"); 
          getBusiness.addParam("id", String.valueOf(temp.getInt("id"))); 
          BusinessDetailsRequestForEverything2 request = new BusinessDetailsRequestForEverything2(getBusiness); 
          request.execute(); 
          businessRequestList.add(request); 
         } 
        } 
       } 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
      super.onPostExecute(result); 
     } 
+1

코드가 어디에 있습니까? – TheFlash

+0

내 질문이 업데이트되었습니다. – elL

답변

1

WindowManager$BadTokenException 발생합니다.

나는 이것이 당신의 AsyncTask.onPreExecute에서 일어날 수있는 방법을 잘 모르겠지만, 확실히 코드에서 (임시) 메모리 누수가있다.

나는 더 이상 사용되지 않는 API 인 ActivityGroup을 친구와 함께 사용하지 않고 Fragments으로 바꿀 것을 제안합니다.

+0

하지만 방금 작업을 시작했을 때 활동이 어떻게 파괴 되었습니까? – elL

+0

@elL'AsyncTask'에서'execute'를 호출하는 코드가 보이지 않으므로 말할 수 없습니다. 그것은 다른 경우 일 수도 있습니다 : 당신의'Activity'가 아직 생성되지 않았습니다;) –

+0

오, 알았습니다. 흠. 나는 더 깊게 파고 들어야 할 것이다. – elL

관련 문제