Jemand könnte mir bitte erklären, warum der Wert der Variablen picture
nur in der OnInBackground()
vorhanden ist?Variablen Werte nicht aus DoInBackground()
Wenn ich darauf in OnPostExecute
zugreifen, ist der Wert verloren.
public class GetPostAsync extends AsyncTask<Void, Integer, String>
{
String picture="";
public GetPostAsync(Context context){
c=context;
}
protected void onPreExecute(){
}
protected String doInBackground(Void...arg0) {
try {
GraphRequest request = GraphRequest.newGraphPathRequest(
AccessToken.getCurrentAccessToken(),
"/myquery",
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
try {
JSONObject jobj = response.getJSONObject();
picture = jobj.getString("picture");
Log.i("TEST","pic: "+picture); //return the right value
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
catch(Exception e) {
}
return picture;
}
protected void onProgressUpdate(Integer...a){
}
protected void onPostExecute(String result) {
Log.i("TEST","pic: "+picture); //return empty
}
}
Ich erkläre haben picture
auf der Oberseite der Aktivität. Ich weiß nicht, wie halten Sie die Werte, die ich in der Onbackground()
Sie müssen den Wert in 'doInBackground' nicht zurückgeben, da er bereits in einer globalen Variablen in der inneren Klasse enthalten ist. Ändern Sie einfach diese 'AsyncTask' zu diesem 'AsyncTask ' –
MohammedAlSafwan
@MohammedAlSafwanle lernen einige Java-Grundlagen ... Es ist keine globale Variable, sondern Feld – Selvin
Es ist Mutltithreading ... Anfrage. executeAsync(); http://ideone.com/PPHi95 – Selvin