Android AsyncTask onPostExecute wird nicht angezeigt, AlertDialog
Ich habe ein Problem mit meinem onPostExecute von einer AsyncTask Klasse. Hier ist der code.
--EDIT: ergänzt in der rest des Codes auf Anfrage--
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;
}
}
}
Aber der alert-dialog noch nie zeigt sich; wenn ich mir im debugger wird ausgeführt, die Warnung.show() Zeile, aber es zeigt nie auf die UI. Hat jemand irgendwelche Ideen auf, warum dies so ist? Danke!
EDIT: beide AlertDialogs, die ausgeführt werden, im debugger aber nie die Anzeige auf der Benutzeroberfläche
EDIT2: ich kopierte einfach den code, den ich hier gepostet (um zu sehen, ob es war der entfernte code habe ich zur Vereinfachung wurde das Problem verursacht) in ein neues Projekt und der alertdialog tatsächlich angezeigt wird, also der code, den ich nahm, ist ein Problem. Dies kommt im LogCat in meinem ursprünglichen Projekt auf Force Close Beendigung der app.
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)
- Sieht aus wie der Kontext könnte nicht richtig sein. Du musst den richtigen Kontext zu AlertDialog.Builder(MainActivity.diese), statt der MainActivity.diese.
- Ich bin nicht sicher, ob ich weiß, was du meinst.
- Scheint, dass Sie haben ein problem mit einer listView und nicht mit asyncTask . Sie sollten uns zeigen, einige mehr code, mit dem Sie für das listView statt.
- Ich kann nicht finden, Stichwort "ListView" in jedem meiner vollständigen code. Gibt es etwas bestimmtes, die ich gesucht werden soll?
- Gut, dass ungerade ist . Die logs sagen, dass es ein Fehler mit einem listView , der auf seiner adapter s getView () - Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies funktioniert für mich, in der OnPostExecute-Methode.
Ich add Activity-Objekt als propretie in meinem AsyncTask-Klasse, die ich instanziiert im Konstruktor, dass AsyncTack so, dass ich anrufen kann, die Aktivität und führen Sie runOnUiThread in onpostexe...
onPostExecute
- Methode läuft bereits auf UIThread, so gibt es keine Notwendigkeit, wickeln Sie den code zu zeigen, den dialog mitrunOnUiThread
.Fand ich das problem mit meinem code. An einem gewissen Punkt dieser Methode, promptAddresses aufgerufen wurde. Es hat seine eigene separate AlertDialog. Da die addressArray hatte einen index von 5 es war die Verschraubung mit dem AlertDialog.builder denn drei der Indizes waren null.
TLDR: habe keine null-Werte in einem string-array beim Umgang mit dem AlertDialog.Bauherren
LÖSUNG: final String[] addressArray = new String [- Adressen.size()];
Vielen Dank an alle, die geholfen haben. Ich entschuldige mich für nicht zu geben, den vollständigen code und verwirrend das ganze problem. Auf jeden Fall, deine Antworten noch geholfen, sehr viel.
Sehe ich deine code aber nicht finden können, keine Probleme. Haben Sie ausgeführt, die
AsyncTask
im main-Thread? Wenn nicht, können Sie wickeln Sie folgt der code für die Karte dieAlertDialog
:onPostExecute()
läuft im UI Thread schon. Keine Notwendigkeit fürrunOnUIThread()
.runOnUIThread()
. Ich habe Erfolg versuchen, Ihren code so komisch.AsyncTask
show()
genannt wird, aber nichts passiert. Können Sie die gleiche Art von dialog inonCreate()
und sehen, ob das funktioniert? Und wie Cheney schrieb, posten Sie Ihre volle AsyncTask.@override
esMainActivity.this.run...
im onPostExecuteEs ist ein Fehler im code für die doInBackground () - Funktion:
Dies erzeugt ein Null-Ausnahme auf der zweiten Linie, weil die Adressen null und wird daher kündigen Sie Ihre thread.
Ich glaube, dass es ein problem in deinem
actvity_main.xml
. Ich versuchte Ihren code, indem Sie unter leereRelativeLayout
Der code funktioniert gut, es zeigt zwei alertdialog zusammen mit codierten Funktionalität. Nur versuchen, die gleiche und verfolgen Sie den Fehler