0

아무도이 문제를 해결하지 못하는 이유를 모릅니다.다른 활동에서 경고 대화 상자를 표시하는 데 오류가 발생했습니다 (활동이 파괴되지 않도록)

여기 완전히 엉망입니다. 나는 안드로이드 애플 리케이션을 만들고 현재 3 가지 활동의 운영에 문제가있다.

나는 Activity3 activity1에, activity2에있습니다.

액티비티 1 : 데이터를 AsyncTask(background)에 수신하고 listView를 표시합니다. listView Item에서 onClick 액션으로 alertDialog를 표시 중입니다.

내가 new NameAsyncTask(Activity1.this).execute();

AsyncTask 클래스를 호출하고있어 AsyncTask

 public NameAsyncTask(Context cxt) { 
      context = cxt; 
      pDialog = new ProgressDialog(context); 
      adapter = new SimpleAdapter(
        context, dataList, 
        R.layout.list_incident, new String[]{"refName", "sub", "status", "categ", "createTime", "organisation"}, 
        new int[]{R.id.in_name, R.id.sub, R.id.status,R.id.categ_show, R.id.created_time_show, R.id.cust_name}); 
      binder = new SimpleAdapter.ViewBinder() { 
       @Override 
       public boolean setViewValue(View view, Object data, String textRepresentation) { 
        if (view.equals((TextView)view.findViewById(R.id.status))) { 
         statusText = (TextView)view.findViewById(R.id.status); 
         if (data.equals("Unresolved")) 
          statusText.setTextColor(context.getResources().getColor(R.color.red)); 
         else if (data.equals("In Progress")) 
          statusText.setTextColor(context.getResources().getColor(R.color.yellow)); 
        } 
        return false; 
       } 
      }; 
     } 

에 생성자를 사용하고 activity2에 : 그것을 클릭으로 목록보기의 항목의 세부 정보를 표시합니다. 마지막으로 finish()을 호출하면 Activity3에 들어갑니다.

Activity3 : 항목의 세부 사항을 업데이트하고 1st activity 때문에 해당 항목이 first activity에서 제거되고 목록보기가 업데이트됩니다 new NameAsyncTask(Activity3.this).execute(); 등의 AsyncTask(background)를 호출. finish()으로 전화하면 첫 번째 활동으로 바로 이동합니다 (두 번째 활동이 이미 완료되었으므로). 다시 내가 목록보기 항목을 클릭하면

이제 문제는, 그것은 또한 distroyed지고 Activity1 여부,

final AlertDialog.Builder alertDialog = new AlertDialog.Builder(Activity1.this); 

확실하지 않음이 라인에

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference 
                   at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:149) 
                   at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:157) 
                   at android.support.v7.app.AlertDialog.resolveDialogTheme(AlertDialog.java:113) 
                   at android.support.v7.app.AlertDialog$Builder.<init>(AlertDialog.java:291) 
                   at com.lavazza.IncidentServiceActivity$GetPendingIncidents$2.onItemClick(IncidentServiceActivity.java:267) 
                   at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
                   at android.widget.AbsListView.performItemClick(AbsListView.java:1156) 
                   at android.widget.AbsListView$PerformClick.run(AbsListView.java:3121) 
                   at android.widget.AbsListView.onTouchUp(AbsListView.java:4048) 
                   at android.widget.AbsListView.onTouchEvent(AbsListView.java:3807) 
                   at android.view.View.dispatchTouchEvent(View.java:10023) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2626) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2307) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) 
                   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) 
                   at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:413) 
                   at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808) 

로 오류가 발생합니다.

listView의 경우 adapter이고 두 활동 모두의 경우 binder이 작동합니다. 그러나 alertDialog에서는 작동하지 않습니다. 생성자에 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);을 선언 할 때. 액티비티 1에서 정상적으로 작동합니다.

나는이 AsyncTaskActivity1Obj.new GetPendingIncidents(Activity3.this).execute();와 Activity3에서 여기에 내가 믿는 자동으로 파괴 된 activity1에

android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
                    at android.view.ViewRootImpl.setView(ViewRootImpl.java:679) 
                    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342) 
                    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 
                    at android.app.Dialog.show(Dialog.java:322) 
                    at com.lavazza.IncidentServiceActivity$GetPendingIncidents$2.onItemClick(IncidentServiceActivity.java:338) 

로 오류가 발생합니다 실행합니다. 틀 렸으면 고쳐줘.

가 이미

을 시도 ->getParent, getApplicationContext, getBaseContext 등의 AlertDialog 선언에 context을 변경. 아무것도 효과가 없습니다.

나는 Activity3에서 돌아온 후에 alertDialog을 표시해야합니다.

나를 도와 줄 사람이 있습니까? 아직도 나는 이것을 수행하는 방법을 생각하고있다.

답변

0

MyApplication.getContext() 대신 문맥 (예 : Activity1.this)을 사용할 수 있습니다.

의 AndroidManifest.xml

<application 
     android:name=".MyApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

MyApplication.java

public class MyApplication extends Application { 

    private static Context context; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 

    public static Context getContext() { 
     return context; 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

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

     String app_name = MyApplication.getContext().getResources().getString(R.string.app_name); 
     Log.d("App name", app_name);  
    } 
} 
+0

여기'MyApplication'은 (는)'app name'을 (를) 참조합니까? – Shambhu

+0

저를 위해 일하지 않았습니다. – Shambhu

+0

'MyApplication'은 주 활동과 같습니다. 선언문에서 설명하고 '응용 프로그램'을 확장하는 클래스를 만들어야합니다. – dralexnumber

0

당신에게 당신은 alertdialog를 보여주고있는 activity3을 끝내고, activity1과 2를 끝낼 필요가 없습니다. 2.

또한 context.finish()를 사용하십시오.
여기서 context = your_activity.this;

희망이 있으면 도움이 될 것입니다.

+0

alertdialog가'Activity1'에 있습니다. 'Activity3'에서'Activity1.AsyncTask'를 호출하면 3rd Activity가 끝납니다. 그러면 'Activity2'가 이미 끝났지 만 직접 'Activity1'에있게됩니다. 그리고'Activity1'에서'listView'의 또 다른 항목을 클릭하면'당신의 활동이 실행 중입니까? '라는 오류가 발생합니다. 여기서 현재 활동은 1 위입니다. – Shambhu