Я в настоящее время использую Koush/ion - https://github.com/koush/ion библиотека для моего приложения.Настройка данных на глобальную переменную
У меня есть глобальная переменная создана public static String content;
И с помощью этого метода в AsyncTask
Ion.with(MainActivity.this, "http://google.com").asString().setCallback(new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String result) {
MainActivity.content = result.toString();
}
});
Однако, когда я пытаюсь получить доступ к переменной контента из AsyncTask, я понял, что это нулевой , Я установил глобальную переменную и установил для нее данные. Что-то не так с этим?
EDIT: Полный сценарий
package dev.tst.app
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
public class MainActivity extends Activity {
public static volatile String content;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
new LongOperation().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Ion.with(MainActivity.this, "http://google.com").asString()
.setCallback(new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String result) {
MainActivity.content = result.toString();
Log.e("Count", content.length() + ".");
}
});
return null;
}
@Override
protected void onPostExecute(String result) {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, MainActivity.content,
Toast.LENGTH_SHORT).show();
}
});
}
}
}
Пожалуйста, проверьте, если 'onPostExecute()' выполняется перед 'OnCompleted()'. – Aprian
Могу ли я спросить, как я могу убедиться, что 'onPostExecute()' выполняется ПОСЛЕ 'onCompleted()' выполняется? – MrYanDao
Я не думаю, что вам нужна «AsyncTask». Попробуйте заменить 'new LongOperation(). Execute();' с 'Ion.with (...)' в вашем 'onCreate()' методе. – Aprian