我希望能够在调用 asynctask
的类中存在的 onPostExecute()
中调用一个方法 - 我该怎么做?
我的意思是,当我调用 AsyncTask 时:
public class MainActivity extends AppCompatActivity {
public function onButtonClick() {
String url = "http://sampledomain.pl/test.php";
String params = "";
new Api().execute(url, params);
}
public function changeText(String response)
{
TextView txt = (TextView) findViewById(R.id.text);
txt.setText(response);
}
}
我希望能够从 onPostExecute
方法中调用 changeText
方法,如下所示:
public class Api extends AsyncTask<String, Void, String> {
// ...
@Override
public void onPostExecute(String response)
{
MainActivity obj = new MainActivity();
obj.changeText(response);
}
}
我在这里看到两个问题:
它不起作用,我不断收到
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null对象引用
错误我希望此类更通用,这意味着我想在
MainActivity
类而不是Api
类中指定要执行的方法。
我该如何解决这个问题?
最佳答案
首先你应该创建一个回调接口(interface)。该代码是通用的,您可以在应用程序的其他地方使用它。
public interface Callback<T>{
void execute(T result);
}
然后您必须修改您的AsyncTask
,以便在构造函数中接受Callback
作为参数。
public class Api extends AsyncTask<String, Void, String> {
public final Callback<String> callback;
public Api(Callback callback) {
this.callback = callback;
}
// other methods ...
@Override
public void onPostExecute(String response) {
callback.execute(response);
}
}
然后您可以将callback
放入您的AsyncTask
。
public void onButtonClick() {
String url = "http://sampledomain.pl/test.php";
String params = "";
new Api(new Callback<String>() {
@Override
public void execute(String result) {
changeText(result);
}
}).execute(url, params);
}
关于java - 使用来自 AsyncTask 的响应作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375170/