2013-09-26 8 views
20

हाई। मैं एक चेतावनी संवाद बनाने की कोशिश की लेकिन जब मैं अपने आवेदन चलाने के लिए, एक अपवादएंड्रॉइड त्रुटि: विंडो जोड़ने में असमर्थ - टोकन नल एक अनुप्रयोग के लिए नहीं है

09-26 12:43:21.949: E/AndroidRuntime(14618): FATAL EXCEPTION: main 
09-26 12:43:21.949: E/AndroidRuntime(14618): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewRootImpl.setView(ViewRootImpl.java:687) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.app.Dialog.show(Dialog.java:278) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.example.stampp.UI.Rewards.DeleteRewardsFragment$1.onItemClick(DeleteRewardsFragment.java:80) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.widget.AbsListView.performItemClick(AbsListView.java:1394) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3024) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3846) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.View.dispatchTouchEvent(View.java:5629) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1964) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1725) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1739) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2062) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1400) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.app.Activity.dispatchTouchEvent(Activity.java:2369) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2010) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.View.dispatchPointerEvent(View.java:5809) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3130) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2658) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:1015) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2667) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.os.Looper.loop(Looper.java:137) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at android.app.ActivityThread.main(ActivityThread.java:4517) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at java.lang.reflect.Method.invokeNative(Native Method) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at java.lang.reflect.Method.invoke(Method.java:511) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
09-26 12:43:21.949: E/AndroidRuntime(14618): at dalvik.system.NativeStart.main(Native Method) 

यह मेरा कोड है फेंक है:

public class DeleteRewardsFragment extends Fragment{ 

private Context context; 

private FragmentsActivity activity; 

private ListView listView; 
private View myFragmentView; 
private DeleteRewardsAdapter adapter; 
private String[] values; 

@SuppressLint("ResourceAsColor") 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    myFragmentView = inflater.inflate(R.layout.listview, container, false); 
    listView = (ListView) myFragmentView.findViewById(android.R.id.list); 


    activity = (FragmentsActivity) getActivity(); 
    context = activity.getApplicationContext(); 

    values = new String[4]; 

    adapter = new DeleteRewardsAdapter(context, values); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(deleteEvent); 

    return myFragmentView; 

} 

private OnItemClickListener deleteEvent = new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 
     alertDialog .setTitle("Jetzt löschen?"); 
     alertDialog .setMessage("Die in deisem Store gesammelten stampss gehen debei verloren!") 
       .setCancelable(false) 
       .setPositiveButton("Abbrechen", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         values = new String[values.length-1]; 
         adapter = new DeleteRewardsAdapter(context, values); 
         listView.setAdapter(adapter); 
        } 
       }) 
       .setNegativeButton("Löschen", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog dialog = alertDialog.create(); 
     dialog.show(); 

    } 
}; 

} 

किसी ने मुझे मदद करने के लिए कर सकते हैं?

उत्तर

40

अपने Activity को AlertDialog जोड़ सकते हैं या Fragment करने के लिए आप अपने Activity के उदाहरण का उपयोग करने के लिए है, न कि अपने आवेदन की जो आप अपने कोड में कर रहे हैं। इस तरह अपने AlertDialog बनाएँ:

AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); 

और वह आप के लिए चाल करना चाहिए! :)

+2

काम करेंगे कि कैसे एक सेवा में यह करने के लिए? –

+0

@ केवेशकानवाल यहां: http://stackoverflow.com/a/31221469/6144372 आप बाद में धन्यवाद कह सकते हैं! :) –

2

संदर्भ के बजाय गतिविधि में भेजें।

AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity); 
7

मेरे मामले में मैं इस तरह मेरे संवाद बनाने के लिए कोशिश कर रहा था:

new Dialog(getApplicationContext()); 

तो मैं के लिए बदलना पड़ा:

new Dialog(MyActivity.this); 

और यह काम करना शुरू किया।

3

मैं बदल दिया है:

ProgressDialog(getApplicationContext()); 

रहे हैं:

ProgressDialog(MainActivity.this); 

,

2

नीचे चीजें आप यह मुद्दा से अधिक प्राप्त करने के लिए कर सकते हैं। यदि आप getApplicationContext() का उपयोग कर रहे

  1. इसके बजाय

    context
    का उपयोग कर के आप
    ActivityName.this

  2. का उपयोग करना चाहिए, तो getApplicationContext()

    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)

जोड़ें उपयोग करने से पहले ध्वज के नीचे का उपयोग आपके मैनिफेस्ट के लिए निम्नलिखित अनुमति:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
1

मैं

activity.this 

को getApplicationContext() बदल यह

संबंधित मुद्दे

 संबंधित मुद्दे