Java 如何从其他类(即活动类)中的(AsyncTask)获取列表值。。?
当我想从AsyncTask类中的全局变量获取值时,我遇到了一个问题。我想从另一个班级叫它 以下是我的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<>(
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=数据位置;
}
您可以通过使用接口获得结果
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);
}
希望这对您有所帮助。:) 您可以使用接口获得结果
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)