Ich habe eine Aktivität (RecipiesActivity), die durch Klicken auf die Schaltfläche "Weiter" der Hauptaktivität meiner Anwendung geöffnet wird.onPostExecute wird nicht aufgerufen
In den RecipiesActivity onCreate möchte ich einen Webdienst in einer AsyncTask aufrufen. Für den Moment, da ich den Webservice noch nicht implementiert habe, rufe ich nur einen Webservice an, der von Bitly bereitgestellt wird (aber das ist irrelevant für mein Problem).
Das Problem ist, dass, obwohl der Webservice aufgerufen wird und keine Ausnahme ausgelöst wird, ist ein Ergebnis Rückgabe von der DoInBackground, aber meine onPostExecute wird nicht aufgerufen. Ich habe einige der Forschung getan, und ich habe die möglichen Gründe, wie nachstehend aufgeführt gefunden - aber keiner scheint mein Fall zu sein:
- OnPostExecute Parameter stimmen nicht überein, die AsyncTask Parameter - in meinem Fall, dass sie
- Ein Bug passen in Android, das nicht zulässt, dass die AsyncTask im UI-Thread ausgeführt wird. Es ist supposadely windet durch Class.forName mit („android.os.AsyncTask“) - Ich habe versucht, diese und machen keinen Unterschied
- AsyncTask nicht aus dem UI-Thread gestartet wird - in meinem Fall ich glaube, es ist
- doInBackground nicht zurück - in meinem Fall hat es, ich habe durch sie mit dem Debugger trat
- @Override nicht vor OnPostExecute verwendet wird - in meinem Fall verwende ich @Override
der Code ist unten:
public class RecipiesActivity extends Activity {
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipies);
tv = (TextView) findViewById(R.id.Response);
//Start the WS call in an AsyncTask
new CallWS().doInBackground("https://api-ssl.bitly.com/v3/shorten?login=maskedLogin&apiKey=maskedKey&longUrl=http%3A%2F%2Fgoogle.com%2F");
}
private class CallWS extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... params) {
String result = null;
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet get_request = new HttpGet(params[0]);
try
{
HttpResponse httpResponse = httpClient.execute(get_request, localContext);
//int responseCode = httpResponse.getStatusLine().getStatusCode();
HttpEntity entity = httpResponse.getEntity();
if (entity != null)
{
InputStream istream = entity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(istream));
try
{
result = br.readLine();
}
catch (Exception e)
{
//TODO Handle the IOException that the readline may throw
}
finally
{
istream.close();
}
}
}catch (Exception e)
{
//TODO Handle the IOException and the ClientProtocolException that the
// httpClient.execute can throw
}
finally
{
httpClient.getConnectionManager().shutdown();
}
return result;
}
@Override
protected void onPostExecute(String result)
{
if (result == null)
{
tv.setText("The result is NULL");
}
else
{
tv.setText(result);
}
}
}
}
Ihre Hilfe ist appreceiated,
dank
Vielen Dank hat zu ändern. Dieser (offensichtliche) Fehler hat das Problem verursacht. – Lefteris
markieren Sie die Lösung als akzeptiert ... – Hades
Ich würde es tun, direkt nachdem es gepostet wurde, aber es forderte mich auf etwa 7-10 Minuten warten, bevor Sie dies tun. Wie auch immer, Antwort ist jetzt markiert :) – Lefteris