java - 为什么 AsyncTask doInBackground 不运行但第二次运行

标签 java android android-asynctask

所以我是新手,我需要调用将从单独文件运行 AsyncTask 的函数。

MainActivity.java代码

public class MainActivity extends AppCompatActivity {
String res;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Asynctasktest newAsy = new Asynctasktest();



    res = newAsy.ValidateUser();

    Toast.makeText(getBaseContext(), "'"+res+"'", Toast.LENGTH_LONG).show();
}

}

和AsyncTaskTest.java代码

public class Asynctasktest extends MainActivity {

String Res;

private class GetFWork extends AsyncTask<Void,Void,String> {

    @Override
    protected void onPreExecute() {
        Res = "onPreExecute";
    }

    @Override
    protected String doInBackground(Void... param) {

        return "am i here";
    }

    @Override
    protected void onPostExecute(String Result) {
        super.onPostExecute(Result);
        Res = Result;
    }
}

public String ValidateUser(){

    final GetFWork Fl = new GetFWork();

    Fl.execute();

    return Res;
}


}

所以我需要获取文本“我在这里”,但我得到“onPreExecute”,这表明在第一次调用时它没有执行 doInBackground。

最佳答案

这就是 AsyncTask 的工作原理。

res = newAsy.ValidateUser();
Toast.makeText(getBaseContext(), "'"+res+"'", Toast.LENGTH_LONG).show();

两者同时执行,因此 - 由于 AsyncTask 是异步的 - res 的值仍然是“onPreExecute”。

关于java - 为什么 AsyncTask doInBackground 不运行但第二次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119879/

相关文章:

android - DOM 解析器教程

android - 是否有必要在 AsyncTask 中访问 SQLiteDatabase?

android - 为什么 AsyncTask 的 postExecute 方法不在 UI 线程中运行?

java - AsyncTask onPostExecute 对话框不起作用

java - 如何正确初始化 JTextPane 样式表,使其他启用 HTML 的组件不受该样式的影响?

java - 如何在struts属性字符串中插入java表达式

java - 如何利用 SWT 的 Hi-DPI 支持来调整小部件大小?

java.lang.ClassNotFoundException - 带有 OpenCV 的 Eclipse

android - android 纹理点 Sprite 在软件渲染器上工作吗?

android - 计算距离相机远近的移动物体的速度