Android AsyncTask (gibt eine ganze Zahl von doInBackground)
Bin ich immer die folgenden Fehler im code unten: Der return-Typ ist nicht kompatibel mit AsyncTask.onPostExecute(Integer). Ich bin versucht, das Ergebnis aus der http-Anforderung erfolgt in der doInBackground Aufgabe. Ich bekomme die Fehlermeldung: "Type mismatch: cannot convert from AsyncTask int-return-Anweisung für isAvailable. Ich fühle mich wie es ist etwas einfach, ich mache das nicht, aber ich kann nicht ganz herausfinden.
public int isAvailable(int position) {
GetIsAvailable isAvail = new GetIsAvailable();
Integer nisAvail = isAvail.execute(position); //error is still here
return nisAvail;
}
private class GetIsAvailable extends AsyncTask<Integer,Void,Integer > {
@Override
protected Integer doInBackground(Integer...position) {
Bundle resBundle = new Bundle();
String url = "http://www.testurl.com"
+ position[0]+"&uname="+AppStatus.mUserName;
URL iuri;
try {
iuri = new URL(url);
URLConnection connection = iuri.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Content-type",
"application/x-www-form-urlencoded");
BufferedReader br = new BufferedReader(new InputStreamReader(
(InputStream) connection.getContent()));
resBundle.putInt("isAvail", Integer.parseInt(br.readLine().trim()));
} catch (MalformedURLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return new Integer(0);
}
@Override
protected Integer onPostExecute(Integer isAvail) { //Main Error here
return isAvail;
}
- Dies könnte völlig off-base (hey, ich bin in der Klasse gerade jetzt, ich bekomme einen pass, oder?) aber sollten Sie nicht
return new Integer(0)
? - Ja, aber es scheint, dass ich immer noch den gleichen Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oh, ich glaube, ich sehe das problem. Ich glaube nicht, dass Sie verarbeiten kann die Art, Sie tun es aktuell. Sie sollten Umgang mit den Auswirkungen der Wert
isAvail
innerhalb deronPostExecute()
Methode.isAvailable()
läuft auf dem Haupt-thread, währendisAvail
läuft in einem separaten thread. Sie versuchen, das Ergebnis der AsyncTask, bevor es an der Fertigstellung.Ich bin mir zu 99% sicher, das ist das problem.
onPostExecute()
statt?onPostExecute()
läuft auf dem UI-thread, also, wenn es zum ändern einer Aktivität ist, ist es sicher das hier tun.Ich glaube was du suchst ist
dann aber die Aufgabe ist nicht mehr asynchron als der UI-thread muss warten, bis der AsyncTask beendet ist.
Wenn Sie es behalten wollen asynchrone dann haben Sie das Ergebnis verarbeiten in onPostExecute.
Dieser int zurückgeben:
dieser Rückgabewert ein int als gut:
Müssen Sie eine ganze Zahl zurück:
Wenn Sie möchten, um zurückgegebene Wert von
doInBackground
Methode.Dann tun Sie dies: