如何返回从AsyncTask的数据 [英] How to return data from asynctask

查看:169
本文介绍了如何返回从AsyncTask的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类继承的AsyncTask

i have a class extends asynctask

private class taskMK extends AsyncTask<Void,Void,JSONObject>{
        String url;
        JSONObject json;
        public taskMK(String tr){
            this.url = tr;
        }
        @Override
        protected JSONObject doInBackground(Void... params) {
            JSONParser jsonParser = new JSONParser();
            JSONObject json = jsonParser.getJSONFromURL(url);
            return json;
        }

        @Override
        protected void onPostExecute(JSONObject result) {
            this.json = result;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
        }
        public JSONObject getkq(){
            return this.json;
        }

    }

在活动

String url = "https://maps.googleapis.com/maps/api/place/search/json?location="+lat+"%2C"+lng+"&name=atm&radius="+bk+"&sensor=false&key=AIzaSyCxaZYo1zJ_QxuNcp5dL5P0xm5XvIJPXRw";
taskMK mk = new taskMK(url);
mk.execute();
JSONObject json = mk.getkq();

我打算把这个code中的AsyncTask类,但我得到的错误无法创建内螺纹的处理程序已经不叫活套。prepare()......其实,我不知道知道怎么做解决了这个。

I intend to put this code in asynctask class but i get error "Can't create handler inside thread that has not called Looper.prepare()" .... Actually, I don't know how to do solved this.

    Double lat = loc.getLatitude();
    Double lng = loc.getLongitude();
    String url = "https://maps.googleapis.com/maps/api/place/search/json?location="+lat+"%2C"+lng+"&name=atm&radius="+bk+"&sensor=false&key=AIzaSyCxaZYo1zJ_QxuNcp5dL5P0xm5XvIJPXRw";

    JSONParser jsonParser = new JSONParser();
    JSONObject json = jsonParser.getJSONFromURL(url);
    marker=getResources().getDrawable(R.drawable.hoe);
    itemizedOverlay = new MarkerATM(marker, mapView);
    int i=0;
    try{
        JSONArray array_atm = json.getJSONArray("results");
        for(i=0;i<array_atm.length();i++){
            JSONObject c = array_atm.getJSONObject(i);
            String atm_name = c.getString("name");
            String atm_address = c.getString("vicinity");

            JSONObject geometry  = c.getJSONObject("geometry");
            JSONObject location = geometry.getJSONObject("location");
            String atm_lat = location.getString("lat");
            String atm_lng = location.getString("lng");

            Double _lat = Double.parseDouble(atm_lat)*1E6;
            Double _lng = Double.parseDouble(atm_lng)*1E6;

            GeoPoint myPoint = new GeoPoint(_lat.intValue(), _lng.intValue());
            OverlayItem overlayItem = new OverlayItem(myPoint, atm_name, atm_address);
            itemizedOverlay.addOverlay(overlayItem);                            
        }
    }   catch(JSONException e){
        e.printStackTrace();
    }
    mapOverlays.add(itemizedOverlay);

我想从taskMK获取数据,但数据总是返回空...怎么办我解决我的问题:( ..对不起,我用英语并不好。

i want to get data from taskMK but data always return null ... how to do i solved my problem :( .. sorry i use english not good.

推荐答案

而不是使用 getkq() taskMK 类,你可以有一个 setkq()在正在执行的AsyncTask的活动类。所以使用下面的:

Rather than using getkq() in the taskMK class you can have a setkq() in the activity class which is executing the asyncTask. So use the following:

private class taskMK extends AsyncTask<Void,Void,JSONObject>{
    String url;
    JSONObject json;
    MyActivityClassObject obj;

    public taskMK(String tr, MyActivityClassObject obj){
        this.url = tr;
        this.obj = obj;
    }
    @Override
    protected JSONObject doInBackground(Void... params) {
        JSONParser jsonParser = new JSONParser();
        JSONObject json = jsonParser.getJSONFromURL(url);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject result) {
        this.obj.setkq(result);
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }
}

而在你的活动类,你可以有这个功能:

And in your activity class you can have this function:

public void setkq(JSONObject obj){
        //Add your parsing logic here
    }

这篇关于如何返回从AsyncTask的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆