从执行操作中获取数据

时间:2016-06-03 11:44:13

标签: android android-studio execute

有什么方法可以从执行操作中获取返回数据?

例如,我有下一行调用执行函数 - 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);
}
}

感谢。

2 个答案:

答案 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
    }