Android 如何将字符串从OnPostExecute提取到我的主活动
我仍然是新的,我重复一遍,在android studio中是新的,我尝试使用listview显示地名、附近地区、纬度和经度。我已经准备好listview,但无法从OnPostExecute获取字符串。我试着用这个,但它根本不起作用,或者我做得不对。我希望任何人都能帮助我,或者告诉我从OnPostExecute获取字符串和双精度的正确方法Android 如何将字符串从OnPostExecute提取到我的主活动,android,google-maps,Android,Google Maps,我仍然是新的,我重复一遍,在android studio中是新的,我尝试使用listview显示地名、附近地区、纬度和经度。我已经准备好listview,但无法从OnPostExecute获取字符串。我试着用这个,但它根本不起作用,或者我做得不对。我希望任何人都能帮助我,或者告诉我从OnPostExecute获取字符串和双精度的正确方法 public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<Ha
public class PlacesDisplayTask extends AsyncTask<Object, Integer,
List<HashMap<String,String>>> {
JSONObject googlePlacesJson;
GoogleMap googleMap;
@Override
public 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) {
for (int i = 0; i < 3; i++) {
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");
}
}
}
公共类位置显示任务扩展异步任务{
JSONObject googlePlacesJson;
谷歌地图谷歌地图;
@凌驾
公共列表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(列表){
对于(int i=0;i<3;i++){
HashMap 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 neighborary=googlePlace.get(“neighborary”);
}
}
}
完成您要做的事情的一种不那么繁琐的方法是执行任何需要在onPostExecute()中返回值的任务。
。您可以使用构造函数输入大多数引用,如上下文,并将它们存储为全局变量以供使用
另一种方法是将类签名中的返回类型设置为List,您可以调用.execute().get()
方法。但这将使后台进程同步,即它将阻塞UI线程,等待结果
我能想到的最后一种选择是使用您已经发布的链接中所述的委托。使用如下界面
public class PlacesDisplayTask extends AsyncTask<Object, Integer,
List<HashMap<String,String>>> {
public AsyncResponse delegate = null;
JSONObject googlePlacesJson;
GoogleMap googleMap;
@Override
public 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) {
delegate.processFinish(list);
}
}
public interface AsyncResponse {
void processFinish(List<HashMap<String,String>> list);
}
公共类位置显示任务扩展异步任务{
公共异步响应委托=null;
JSONObject googlePlacesJson;
谷歌地图谷歌地图;
@凌驾
公共列表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(列表){
委托.进程完成(列表);
}
}
您的活动应该通过实现接口的方法来处理响应
public class MainActivity implements AsyncResponse{
PlacesDisplayTask asyncTask =new PlacesDisplayTask ();
@Override
public void onCreate(Bundle savedInstanceState) {
//this to set delegate/listener back to this class
asyncTask.delegate = this;
//execute the async task
asyncTask.execute();
}
//this override the implemented method from asyncTask
void processFinish(List<HashMap<String,String>> list){
//Here you will receive the result fired from async class
//of onPostExecute(result) method.
for (int i = 0; i < 3; i++) {
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");
}
}
}
public类MainActivity实现异步响应{
PlacesDisplayTask asyncTask=新PlacesDisplayTask();
@凌驾
创建时的公共void(Bundle savedInstanceState){
//此选项用于将委托/侦听器设置回此类
asyncTask.delegate=这个;
//执行异步任务
asyncTask.execute();
}
//这将重写asyncTask中实现的方法
void processFinish(列表){
//在这里,您将收到从异步类激发的结果
//onPostExecute(结果)方法的。
对于(int i=0;i<3;i++){
HashMap 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 neighborary=googlePlace.get(“neighborary”);
}
}
}
创建这样一个接口
public class PlacesDisplayTask extends AsyncTask<Object, Integer,
List<HashMap<String,String>>> {
public AsyncResponse delegate = null;
JSONObject googlePlacesJson;
GoogleMap googleMap;
@Override
public 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) {
delegate.processFinish(list);
}
}
public interface AsyncResponse {
void processFinish(List<HashMap<String,String>> list);
}
公共接口异步响应{
作废处理完成(列表);
}
是PlacesDisplayTask
类是内部类、活动还是单独的类?@ρ∑ѕρєK内部类使用interface
创建自定义侦听器,或者将代码从onCreate
移动到onPostExecute
,在其中要使用值可以向我展示如何实现接口的使用。我非常确定这项工作绝对很好@ρ∑ѕρєK我试图通过在onPostExecute,myDb.insertHospital(placeName,neighboration,lat,lng)插入代码,将其中的4个值插入数据库中的一个表中代码>但它得到了一个错误java.lang.NullPointerException。它在modularsoft.anaccident.NearbyFragment.processFinish(NearbyFragment.java:121)处返回java.lang.NullPointerException在modularsoft.anaccident.NearbyFragment$PlacesDisplayTask.onPostExecute(NearbyFragment.java:321)在modularsoft.anaccident.NearbyFragment$PlacesDisplayTask.onPostExecute(NearbyFragment.java:296)处