有什么方法可以从执行操作中获取返回数据?
例如,我有下一行调用执行函数 - googlePlacesReadTask.execute(toPass);
而 googlePlacesReadTask 会向我返回一些解析器数据。那么如何才能获得该操作返回给我的数据?
AsyncTask -
public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {
JSONObject googlePlacesJson;
GoogleMap googleMap;
@Override
protected List<HashMap<String, String>> doInBackground(Object... inputObj) {
List<HashMap<String, String>> googlePlacesList = null;
Places placeJsonParser = new Places();
try {
googlePlacesJson = new JSONObject((String) inputObj[1]);
googlePlacesList = placeJsonParser.parse(googlePlacesJson);
} catch (Exception e) {
Log.d("Exception", e.toString());
}
if(String.valueOf(googlePlacesList) != "[]"){
//Find the place
}
else{
//No place found
}
return googlePlacesList;
}
}
第二个AsyncTask -
public class GooglePlacesReadTask extends AsyncTask<Object, Integer, String> {
String googlePlacesData = null;
GoogleMap googleMap;
@Override
protected String doInBackground(Object... inputObj) {
try {
googleMap = (GoogleMap) inputObj[0];
String googlePlacesUrl = (String) inputObj[1];
Http http = new Http();
googlePlacesData = http.read(googlePlacesUrl);
} catch (Exception e) {
Log.d("Google Place Read Task", e.toString());
}
return googlePlacesData;
}
@Override
protected void onPostExecute(String result) {
PlacesDisplayTask placesDisplayTask = new PlacesDisplayTask();
Object[] toPass = new Object[2];
toPass[0] = googleMap;
toPass[1] = result;
placesDisplayTask.execute(toPass);
}
}
感谢。
答案 0 :(得分:0)
基于您希望从该方法获得哪种类型的数据。如果该方法返回String数据,则将其保存在String变量中。
例如: 在您的情况下,如果googlePlacesReadTask返回String类型的数据,则将其存储在字符串变量中,如:
String data = googlePlacesReadTask.execute(toPass);
希望它会有所帮助
答案 1 :(得分:0)
使用AsyncTask的onPostExecute
方法,您可以获得服务的响应(由后台进程发送),并根据需要进行处理。
如果您需要在类中返回数据,可以向AsyncTask发送对它的引用,并从AsyncTask中调用一个类方法,向它发送所需的数据
只有一种方法,还有更多。
虚拟例子:
public class MyAsyncTask extends AsyncTask<Void, Void, String> {
private MyClass myClass;
public MyAsyncTask(MyClass myClass) {
this.myClass = myClass;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
return something;
}
@Override
protected void onPostExecute(String something) {
super.onPostExecute(something);
if(myClass != null){
myClass.thereYouGo(something);
}
}
}
来自你的班级(MyClass):
new MyAsyncTask(this).execute();
MyClass中的Receiver方法:
public void thereYouGo(String something){
// do what you want
}