Java 如何从其他类(即活动类)中的(AsyncTask)获取列表值。。?

Java 如何从其他类(即活动类)中的(AsyncTask)获取列表值。。?,java,android,android-asynctask,Java,Android,Android Asynctask,当我想从AsyncTask类中的全局变量获取值时,我遇到了一个问题。我想从另一个班级叫它 以下是我的AsyncTask类代码: public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> { List<NearbyPlaceModel> data_place = new ArrayList<>(

当我想从AsyncTask类中的全局变量获取值时,我遇到了一个问题。我想从另一个班级叫它

以下是我的AsyncTask类代码:

public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {

    List<NearbyPlaceModel> data_place = new ArrayList<>();
    JSONObject googlePlacesJson;
    GoogleMap googleMap;

    @Override
    protected List<HashMap<String, String>> doInBackground(Object... inputObj) {

        List<HashMap<String, String>> googlePlacesList = null;
        Places placeJsonParser = new Places();

        try {
            googleMap = (GoogleMap) inputObj[0];
            googlePlacesJson = new JSONObject((String) inputObj[1]);
            googlePlacesList = placeJsonParser.parse(googlePlacesJson);
        } catch (Exception e) {
            Log.d("Exception", e.toString());
        }
        return googlePlacesList;
    }

    @Override
    protected void onPostExecute(List<HashMap<String, String>> list) {
        googleMap.clear();
        data_place.clear();
        for (int i = 0; i < list.size(); i++) {
            if(i < 10 ) {
                HashMap<String, String> googlePlace = list.get(i);
                double lat = Double.parseDouble(googlePlace.get("lat"));
                double lng = Double.parseDouble(googlePlace.get("lng"));
                String placeName = googlePlace.get("place_name");
                String vicinity = googlePlace.get("vicinity");
                LatLng latLng = new LatLng(lat, lng);
                markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon"))));
                markerOptions.title(placeName + " : " + vicinity);
                googleMap.addMarker(markerOptions);

                NearbyPlaceModel items = new NearbyPlaceModel();
                items.setVicinity(vicinity);
                items.setPlace_name(placeName);
                items.setLat(String.valueOf(lat));
                items.setLang(String.valueOf(lng));
                data_place.add(items);
            }
        }
    }

}

还是我的代码有问题?

如果我理解正确!在AsyncTask类中创建getter和setter方法。通过这种方式,您可以从活动中获取数据和设置数据

    public List<NearbyPlaceModel> getData_place() {
            return data_place;
        }

    public void setData_place(List<NearbyPlaceModel> data_place) {
            this.data_place = data_place;
        }
public List getData_place(){
返回数据的位置;
}
公共作废设置数据位置(列出数据位置){
this.data\u place=数据位置;
}

如果我理解正确!在AsyncTask类中创建getter和setter方法。通过这种方式,您可以从活动中获取数据和设置数据

    public List<NearbyPlaceModel> getData_place() {
            return data_place;
        }

    public void setData_place(List<NearbyPlaceModel> data_place) {
            this.data_place = data_place;
        }
public List getData_place(){
返回数据的位置;
}
公共作废设置数据位置(列出数据位置){
this.data\u place=数据位置;
}

您可以通过使用接口获得结果

  • 使用所需的回调方法创建接口
  • 在你的活动中实施它
  • 您将在回调方法中得到结果
  • 这里我给你一个基于你的代码的例子。 您的MainActivity类应该是这样的-

     public class MainActivity extends AppCompatActivity implements PlaceInterface{
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
    
             // your code...
    
             // calling the AsyncTask and send reference of the interface on it
             new PlacesDisplayTask(this).execute();  // something like this
    
         }
    
    
         @Override
         public void myPlaceList(ArrayList<NearbyPlaceModel>   nearbyPlaceModelArrayList) {
             ListView nearby_place = (ListView)  findViewById(R.id.itemListView);
             ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, nearbyPlaceModelArrayList);
             nearby_place.setAdapter(customAdapter);
         }
    }
    
     public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {
    
         ArrayList<NearbyPlaceModel> data_place = new ArrayList<>();   // change
         JSONObject googlePlacesJson;
         GoogleMap googleMap;
         PlaceInterface placeInterface;    // change
    
         public PlacesDisplayTask(PlaceInterface placeInterface){   // change
             this.placeInterface = placeInterface;
         }
    
         @Override
         protected List<HashMap<String, String>> doInBackground(Object... inputObj) {
    
             List<HashMap<String, String>> googlePlacesList = null;
             Places placeJsonParser = new Places();
    
             try {
                 googleMap = (GoogleMap) inputObj[0];
                 googlePlacesJson = new JSONObject((String) inputObj[1]);
                 googlePlacesList = placeJsonParser.parse(googlePlacesJson);
             } catch (Exception e) {
                 Log.d("Exception", e.toString());
             }
             return googlePlacesList;
         }
    
         @Override
         protected void onPostExecute(List<HashMap<String, String>> list) {
             googleMap.clear();
             data_place.clear();
             for (int i = 0; i < list.size(); i++) {
                 if(i < 10 ) {
                     HashMap<String, String> googlePlace = list.get(i);
                     double lat = Double.parseDouble(googlePlace.get("lat"));
                     double lng = Double.parseDouble(googlePlace.get("lng"));
                     String placeName = googlePlace.get("place_name");
                     String vicinity = googlePlace.get("vicinity");
                     LatLng latLng = new LatLng(lat, lng);
                 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon"))));
                     markerOptions.title(placeName + " : " + vicinity);
                     googleMap.addMarker(markerOptions);
    
                     NearbyPlaceModel items = new NearbyPlaceModel();
                     items.setVicinity(vicinity);
                     items.setPlace_name(placeName);
                     items.setLat(String.valueOf(lat));
                     items.setLang(String.valueOf(lng));
                     data_place.add(items);
    
                     placeInterface.myPlaceList(data_place);  // change
                 }
             }
         }
    
     }
    
    public类MainActivity扩展AppCompatActivity实现PlaceInterface{
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //你的代码。。。
    //调用AsyncTask并发送其上接口的引用
    new PlacesDisplayTask(this).execute();//类似这样的内容
    }
    @凌驾
    public void myPlaceList(ArrayList nearbyPlaceModelArrayList){
    ListView附近的位置=(ListView)findViewById(R.id.itemListView);
    ListAdapter customAdapter=新的ListAdapter(这个,R.layout.nearear\u place\u listview,nearbyPlaceModelArrayList);
    附近的_place.setAdapter(customAdapter);
    }
    }
    
    您的PlacesDisplayTask类应该是这样的-

     public class MainActivity extends AppCompatActivity implements PlaceInterface{
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
    
             // your code...
    
             // calling the AsyncTask and send reference of the interface on it
             new PlacesDisplayTask(this).execute();  // something like this
    
         }
    
    
         @Override
         public void myPlaceList(ArrayList<NearbyPlaceModel>   nearbyPlaceModelArrayList) {
             ListView nearby_place = (ListView)  findViewById(R.id.itemListView);
             ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, nearbyPlaceModelArrayList);
             nearby_place.setAdapter(customAdapter);
         }
    }
    
     public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {
    
         ArrayList<NearbyPlaceModel> data_place = new ArrayList<>();   // change
         JSONObject googlePlacesJson;
         GoogleMap googleMap;
         PlaceInterface placeInterface;    // change
    
         public PlacesDisplayTask(PlaceInterface placeInterface){   // change
             this.placeInterface = placeInterface;
         }
    
         @Override
         protected List<HashMap<String, String>> doInBackground(Object... inputObj) {
    
             List<HashMap<String, String>> googlePlacesList = null;
             Places placeJsonParser = new Places();
    
             try {
                 googleMap = (GoogleMap) inputObj[0];
                 googlePlacesJson = new JSONObject((String) inputObj[1]);
                 googlePlacesList = placeJsonParser.parse(googlePlacesJson);
             } catch (Exception e) {
                 Log.d("Exception", e.toString());
             }
             return googlePlacesList;
         }
    
         @Override
         protected void onPostExecute(List<HashMap<String, String>> list) {
             googleMap.clear();
             data_place.clear();
             for (int i = 0; i < list.size(); i++) {
                 if(i < 10 ) {
                     HashMap<String, String> googlePlace = list.get(i);
                     double lat = Double.parseDouble(googlePlace.get("lat"));
                     double lng = Double.parseDouble(googlePlace.get("lng"));
                     String placeName = googlePlace.get("place_name");
                     String vicinity = googlePlace.get("vicinity");
                     LatLng latLng = new LatLng(lat, lng);
                 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon"))));
                     markerOptions.title(placeName + " : " + vicinity);
                     googleMap.addMarker(markerOptions);
    
                     NearbyPlaceModel items = new NearbyPlaceModel();
                     items.setVicinity(vicinity);
                     items.setPlace_name(placeName);
                     items.setLat(String.valueOf(lat));
                     items.setLang(String.valueOf(lng));
                     data_place.add(items);
    
                     placeInterface.myPlaceList(data_place);  // change
                 }
             }
         }
    
     }
    
    公共类位置显示任务扩展异步任务{
    ArrayList data_place=新建ArrayList();//更改
    JSONObject googlePlacesJson;
    谷歌地图谷歌地图;
    PlaceInterface PlaceInterface;//更改
    公共场所显示任务(场所界面场所界面){//change
    this.placeInterface=placeInterface;
    }
    @凌驾
    受保护列表doInBackground(对象…inputObj){
    列表googlePlacesList=null;
    Places placeJsonParser=new Places();
    试一试{
    googleMap=(googleMap)inputObj[0];
    googlePlacesJson=新的JSONObject((字符串)inputObject[1]);
    googlePlacesList=placeJsonParser.parse(googlePlacesJson);
    }捕获(例外e){
    Log.d(“异常”,例如toString());
    }
    返回谷歌PlacesList;
    }
    @凌驾
    受保护的void onPostExecute(列表){
    googleMap.clear();
    数据_place.clear();
    对于(int i=0;i
    这就是界面-

     public interface PlaceInterface {
         void myPlaceList(ArrayList<NearbyPlaceModel> nearbyPlaceModelArrayList);
     }
    
    公共接口PlaceInterface{
    作废我的PlaceList(ArrayList靠近PlaceModelArrayList);
    }
    

    希望这对您有所帮助。:)

    您可以使用接口获得结果

  • 使用所需的回调方法创建接口
  • 在你的活动中实施它
  • 您将在回调方法中得到结果
  • 这里我给你一个基于你的代码的例子。 您的MainActivity类应该是这样的-

     public class MainActivity extends AppCompatActivity implements PlaceInterface{
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
    
             // your code...
    
             // calling the AsyncTask and send reference of the interface on it
             new PlacesDisplayTask(this).execute();  // something like this
    
         }
    
    
         @Override
         public void myPlaceList(ArrayList<NearbyPlaceModel>   nearbyPlaceModelArrayList) {
             ListView nearby_place = (ListView)  findViewById(R.id.itemListView);
             ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, nearbyPlaceModelArrayList);
             nearby_place.setAdapter(customAdapter);
         }
    }
    
     public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {
    
         ArrayList<NearbyPlaceModel> data_place = new ArrayList<>();   // change
         JSONObject googlePlacesJson;
         GoogleMap googleMap;
         PlaceInterface placeInterface;    // change
    
         public PlacesDisplayTask(PlaceInterface placeInterface){   // change
             this.placeInterface = placeInterface;
         }
    
         @Override
         protected List<HashMap<String, String>> doInBackground(Object... inputObj) {
    
             List<HashMap<String, String>> googlePlacesList = null;
             Places placeJsonParser = new Places();
    
             try {
                 googleMap = (GoogleMap) inputObj[0];
                 googlePlacesJson = new JSONObject((String) inputObj[1]);
                 googlePlacesList = placeJsonParser.parse(googlePlacesJson);
             } catch (Exception e) {
                 Log.d("Exception", e.toString());
             }
             return googlePlacesList;
         }
    
         @Override
         protected void onPostExecute(List<HashMap<String, String>> list) {
             googleMap.clear();
             data_place.clear();
             for (int i = 0; i < list.size(); i++) {
                 if(i < 10 ) {
                     HashMap<String, String> googlePlace = list.get(i);
                     double lat = Double.parseDouble(googlePlace.get("lat"));
                     double lng = Double.parseDouble(googlePlace.get("lng"));
                     String placeName = googlePlace.get("place_name");
                     String vicinity = googlePlace.get("vicinity");
                     LatLng latLng = new LatLng(lat, lng);
                 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon"))));
                     markerOptions.title(placeName + " : " + vicinity);
                     googleMap.addMarker(markerOptions);
    
                     NearbyPlaceModel items = new NearbyPlaceModel();
                     items.setVicinity(vicinity);
                     items.setPlace_name(placeName);
                     items.setLat(String.valueOf(lat));
                     items.setLang(String.valueOf(lng));
                     data_place.add(items);
    
                     placeInterface.myPlaceList(data_place);  // change
                 }
             }
         }
    
     }
    
    public类MainActivity扩展AppCompatActivity实现PlaceInterface{
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //你的代码。。。
    //调用AsyncTask并发送其上接口的引用
    new PlacesDisplayTask(this).execute();//类似这样的内容
    }
    @凌驾
    public void myPlaceList(ArrayList nearbyPlaceModelArrayList){
    ListView附近的位置=(ListView)findViewById(R.id.itemListView);
    ListAdapter customAdapter=新的ListAdapter(这个,R.layout.nearear\u place\u listview,nearbyPlaceModelArrayList);
    附近的_place.setAdapter(customAdapter);
    }
    }
    
    您的PlacesDisplayTask类应该是这样的-

     public class MainActivity extends AppCompatActivity implements PlaceInterface{
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
    
             // your code...
    
             // calling the AsyncTask and send reference of the interface on it
             new PlacesDisplayTask(this).execute();  // something like this
    
         }
    
    
         @Override
         public void myPlaceList(ArrayList<NearbyPlaceModel>   nearbyPlaceModelArrayList) {
             ListView nearby_place = (ListView)  findViewById(R.id.itemListView);
             ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, nearbyPlaceModelArrayList);
             nearby_place.setAdapter(customAdapter);
         }
    }
    
     public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> {
    
         ArrayList<NearbyPlaceModel> data_place = new ArrayList<>();   // change
         JSONObject googlePlacesJson;
         GoogleMap googleMap;
         PlaceInterface placeInterface;    // change
    
         public PlacesDisplayTask(PlaceInterface placeInterface){   // change
             this.placeInterface = placeInterface;
         }
    
         @Override
         protected List<HashMap<String, String>> doInBackground(Object... inputObj) {
    
             List<HashMap<String, String>> googlePlacesList = null;
             Places placeJsonParser = new Places();
    
             try {
                 googleMap = (GoogleMap) inputObj[0];
                 googlePlacesJson = new JSONObject((String) inputObj[1]);
                 googlePlacesList = placeJsonParser.parse(googlePlacesJson);
             } catch (Exception e) {
                 Log.d("Exception", e.toString());
             }
             return googlePlacesList;
         }
    
         @Override
         protected void onPostExecute(List<HashMap<String, String>> list) {
             googleMap.clear();
             data_place.clear();
             for (int i = 0; i < list.size(); i++) {
                 if(i < 10 ) {
                     HashMap<String, String> googlePlace = list.get(i);
                     double lat = Double.parseDouble(googlePlace.get("lat"));
                     double lng = Double.parseDouble(googlePlace.get("lng"));
                     String placeName = googlePlace.get("place_name");
                     String vicinity = googlePlace.get("vicinity");
                     LatLng latLng = new LatLng(lat, lng);
                 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon"))));
                     markerOptions.title(placeName + " : " + vicinity);
                     googleMap.addMarker(markerOptions);
    
                     NearbyPlaceModel items = new NearbyPlaceModel();
                     items.setVicinity(vicinity);
                     items.setPlace_name(placeName);
                     items.setLat(String.valueOf(lat));
                     items.setLang(String.valueOf(lng));
                     data_place.add(items);
    
                     placeInterface.myPlaceList(data_place);  // change
                 }
             }
         }
    
     }
    
    公共类位置显示任务扩展异步任务{
    ArrayList data_place=新建ArrayList();//更改
    JSONObject googlePlacesJson;
    谷歌地图谷歌地图;
    PlaceInterface PlaceInterface;//更改
    公共场所显示任务(场所界面场所界面){//change
    this.placeInterface=placeInterface;
    }
    @凌驾
    受保护列表背景(O)