如何返回从AsyncTask的数据 [英] How to return data from 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屋!