Android AsyncTask onPostExecute not displaying AlertDialog

I have a problem with my onPostExecute from the AsyncTask class. Here is the code.

- EDIT: added to the rest of the code upon request -

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); preliminaryTasks(); } private void preliminaryTasks() { //removed more code new discoverAddresses().execute(); } public class discoverAddresses extends AsyncTask<String, Void, List<String>> { @Override protected List<String> doInBackground(String... params){ /* Lots of code here taken out */ List<String> addresses = new ArrayList<String>(); //Added for debugging purposes addresses.add("http://192.168.1.120:80"); addresses.add("http://192.168.1.110:80"); return addresses; } @Override protected void onPostExecute(List<String> addresses){ MainActivity.this.runOnUiThread(new Runnable(){ public void run(){ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("Are you sure you want to exit?").setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { MainActivity.this.finish(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } }); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("Are you sure you want to exit?").setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { MainActivity.this.finish(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return; } } } 

But the warning dialog never appears; when I look in the debugger, it will execute the alert.show () line, but it never appears in the user interface. Does anyone have any idea on why this is? Thanks!

EDIT: both AlertDialogs are executed in the debugger, but never displayed in the user interface

EDIT2: I only copied the code that I posted here (to see if it was remote code that I pulled out to simplify causing the problem) to a new project, and alertdialog actually appears, which means the code I exited the problem. This happens in LogCat in my original project after the Close application closes.

 02-02 11:13:28.746: D/AndroidRuntime(11658): Shutting down VM 02-02 11:13:28.746: W/dalvikvm(11658): threadid=1: thread exiting with uncaught exception (group=0x40fce300) 02-02 11:13:28.762: E/AndroidRuntime(11658): FATAL EXCEPTION: main 02-02 11:13:28.762: E/AndroidRuntime(11658): java.lang.NullPointerException 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.AbsListView.obtainView(AbsListView.java:2257) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.ListView.onMeasure(ListView.java:1156) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 02-02 11:13:28.762: E/AndroidRuntime(11658): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.View.measure(View.java:15172) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1077) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.Choreographer.doFrame(Choreographer.java:525) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.os.Handler.handleCallback(Handler.java:615) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.os.Handler.dispatchMessage(Handler.java:92) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.os.Looper.loop(Looper.java:137) 02-02 11:13:28.762: E/AndroidRuntime(11658): at android.app.ActivityThread.main(ActivityThread.java:4899) 02-02 11:13:28.762: E/AndroidRuntime(11658): at java.lang.reflect.Method.invokeNative(Native Method) 02-02 11:13:28.762: E/AndroidRuntime(11658): at java.lang.reflect.Method.invoke(Method.java:511) 02-02 11:13:28.762: E/AndroidRuntime(11658): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 02-02 11:13:28.762: E/AndroidRuntime(11658): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 02-02 11:13:28.762: E/AndroidRuntime(11658): at dalvik.system.NativeStart.main(Native Method) 
+4
source share
5 answers

I found a problem with my code. At some point, this method called promptAddresses. It has its own separate AlertDialog. Since the AddressArray address was index 5, it hung with AlertDialog.builder because the three indexes were empty.

TL; DR: do not have null values ​​in an array of strings when working with AlertDialog.Builders

SOLUTION: final String [] addressArray = new String [ addresses.size () ];

Thanks to everyone who helped. I apologize for not giving the full code and confusing the whole problem. Anyway, your answers still helped a lot.

 public String promptAddresses(List<String> addresses){ final String[] addressArray = new String[5]; int i = 0; Iterator it = addresses.iterator(); while(it.hasNext()){ String next = (String) it.next(); addressArray[i] = next; Log.i("ADDRESSES", next); i++; } AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Pick your address"); builder.setItems(addressArray, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // The 'which' argument contains the index position // of the selected item } }); AlertDialog alert = builder.create(); alert.show(); return hubAddress; } 
+1
source

this works for me, in the OnPostExecute method.

I add an Activity object as a propretie to my AsyncTask class, which I create in the constructor of this AsyncTack so that I can call this action and execute runOnUiThread in onpostexe ...

 AlertDialog.Builder builder = new AlertDialog.Builder(Activity); builder.setTitle("Connection ?"); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setMessage("Test \n "); builder.setPositiveButton("Ok",null); final AlertDialog alert = builder.create(); Activity.runOnUiThread(new java.lang.Runnable(){ public void run(){ //show AlertDialog alert.show(); } }); 
+3
source

I am looking at your code but cannot find any problems. Did you execute AsyncTask in the main thread? If not, you can wrap the following code to display AlertDialog :

 runOnUiThread(new Runable(){ public void run(){ //show AlertDialog } }) 
0
source

There is an error in your code for the doInBackground () function:

 List<String> addresses = null; //Added for debugging purposes addresses.add("http://192.168.1.120:80"); 

This will throw a Null exception on the second line because the addresses are null and therefore terminate your stream.

0
source

I think there may be a problem in your actvity_main.xml . I tried your provided code by taking an empty RelativeLayout . The code works fine, it shows two alertdialog along with coded functions. Just try the same and track the error

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout> 
0
source

All Articles