Java 将数据设置为全局变量
我目前正在为我的应用程序使用Koush/ion-library 我设置了一个全局变量 公共静态字符串内容 并在异步任务中使用此方法Java 将数据设置为全局变量,java,android,global-variables,Java,Android,Global Variables,我目前正在为我的应用程序使用Koush/ion-library 我设置了一个全局变量 公共静态字符串内容 并在异步任务中使用此方法 Ion.with(MainActivity.this, "http://google.com").asString().setCallback(new FutureCallback<String>() { @Override public void onCompleted(Exception e, String result) { MainAct
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中访问变量内容时,我意识到它是空的。
我已经设置了一个全局变量,并为其设置了数据。有什么问题吗
编辑:完整脚本
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();
}
});
}
}
}
尝试将变量设置为易失性:
public static volatile String content;
您确定结果不为空吗?是。在此行MainActivity.content=result.toString;Log.ecoount,content.length+。;它返回一个int结果而不是null,告诉我变量内容中有数据。但是,使用此方法后,内容将变回null。请检查onPostExecute是否在onCompleted之前执行。我可以问一下如何确保onPostExecute在onCompleted完成后执行?我认为这里不需要AsyncTask。尝试替换新的LongOperation.execute;用离子,用。。。如果我必须这样做,我无法控制这个方法的字符串。是否有任何方法可以使捕获的数据可供全球用户访问?