Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将变量从asynctask返回到UI_Java_Android_Google Maps_Android Asynctask - Fatal编程技术网

Java 将变量从asynctask返回到UI

Java 将变量从asynctask返回到UI,java,android,google-maps,android-asynctask,Java,Android,Google Maps,Android Asynctask,我正在尝试将LocationData类型的变量数据返回到onCreate,以便向地图添加标记 我获取背景中的坐标并使用: publishProgress(data); 然后我使用: public LocationData onProgressUpdate(LocationData data) { return data; } 将位置数据传递回UI 然后,我使用以下命令调用onCreate中的数据: new EndpointsTask().onProgre

我正在尝试将LocationData类型的变量数据返回到onCreate,以便向地图添加标记

我获取背景中的坐标并使用:

 publishProgress(data);
然后我使用:

  public   LocationData onProgressUpdate(LocationData data) {


        return data;
   }
将位置数据传递回UI

然后,我使用以下命令调用onCreate中的数据:

 new EndpointsTask().onProgressUpdate(data);
然后,我尝试将坐标添加到地图中:

mMap.addMarker(new MarkerOptions()
    .position(new LatLng(data.getLat(), data.getLongitude()))
         .title("banana"));
除非在data.getLat()/data.getLongitude中实际键入lat/long值,否则不会在地图上获取任何点。lat long值在发布前打印到日志中,因此我知道我得到的值是正确的

为什么我没有把分数添加到地图上

完整代码:

public class FinderActivity extends Activity implements LocationListener  {


GoogleMap mMap;
Location myLocation;
EditText length;
String lengthString;
LocationManager locationmanager;
double lati;
double longi;
String nameFirst1;


   List<Address> address;
   Geocoder coder = new Geocoder(this);
private static final String TAG_ID = "id";
private static final String TAG_FIRSTNAME = "nameFirst";
private static final String TAG_LASTNAME = "nameLast";
private static final String TAG_EMAIL = "emailAddress";
private static final String TAG_ADDRESS = "streetAddress";
private static final String TAG_STATE = "state";

private static final String TAG_PHONE = "phone";
JSONArray contacts = null;


private static class LocationData {
     private double lat;
     private double longitude;
     private String name;

     public LocationData(double lat, double longitude, String name) {
         this.lat = lat;
         this.longitude = longitude;
         this.name = name;
     }

     public void setLat(double lat) {
         this.lat = lat;
     }

     public void setLongitude(double longitude) {
         this.longitude = longitude;
     }

     public double getLat() {
         return lat;
     }

     public double getLongitude() {
         return longitude;
     }

     public void setName(String name) {
           this.name = name;
        }

     public String getName() {
         return name;

        }

     }
LocationData data = new LocationData(lati, longi, nameFirst1);


@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);
    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    if (mMap!= null) {

        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);


        mMap.setMyLocationEnabled(true);
        mMap.animateCamera(CameraUpdateFactory.zoomBy(17));

        }

    LocationManager locationmanager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria cr = new Criteria();
    String provider = locationmanager.getBestProvider(cr, true);

    Location location = locationmanager.getLastKnownLocation(provider);

    locationmanager.requestLocationUpdates(provider, 20, 0, (LocationListener) this);

    mMap.moveCamera(CameraUpdateFactory.newLatLng((new LatLng(location.getLatitude(), location.getLongitude()))));


    new EndpointsTask().onProgressUpdate(data);

    mMap.addMarker(new MarkerOptions()
    .position(new LatLng(data.getLat(), data.getLongitude()))
         .title("banana"));


}

public class EndpointsTask extends AsyncTask<Context, LocationData, Long> {

    private List<LocationData> locationList = new ArrayList<LocationData>();

    public Long doInBackground(Context... contexts) {

      Contactinfoendpoint.Builder endpointBuilder = new Contactinfoendpoint.Builder(
          AndroidHttp.newCompatibleTransport(),
          new JacksonFactory(),
          new HttpRequestInitializer() {
          public void initialize(HttpRequest httpRequest) { }
          });
  Contactinfoendpoint endpoint = CloudEndpointUtils.updateBuilder(
  endpointBuilder).build();

  try {

    String apples = endpoint.listContactInfo().execute().toString();

    JSONObject jObject = new JSONObject(apples);

    JSONArray jsonArr = jObject.getJSONArray("items");

     for(int i =0 ; i<jsonArr.length() ;i++ ){
         JSONObject jsonObj1 = jsonArr.getJSONObject(i);


                    // Storing each json item in variable
                    String id = jsonObj1.getString(TAG_ID);
                    String nameFirst1 = jsonObj1.getString(TAG_FIRSTNAME);
                    String nameLast1 = jsonObj1.getString(TAG_LASTNAME);
                    String emailAddress1 = jsonObj1.getString(TAG_EMAIL);
                    String streetAddress1 = jsonObj1.getString(TAG_ADDRESS);
                    String phone1 = jsonObj1.getString(TAG_PHONE);

                    //test to see if made it to string
                    Log.d("YOUR_TAG", "First Name: " + nameFirst1 + " Last Name: " + nameLast1);

                       address = coder.getFromLocationName(streetAddress1,5);

                        Address location1 = address.get(0);

                        // SET LAT LNG VALUES FOR MARKER POINT

                    double lati = location1.getLatitude();
                        double longi = location1.getLongitude();

                         Log.d("Location", "Location:" + lati + " " +  longi);


                         locationList.add(data);
                         publishProgress(data);

     }

    } catch (IOException e) {
    e.printStackTrace();
  } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
      return (long) 0;

    }

    public   LocationData onProgressUpdate(LocationData data) {


        return data;
   }

    }
公共类FinderActivity扩展活动实现LocationListener{
谷歌地图;
位置;
编辑文本长度;
字符串长度字符串;
地点经理地点经理;
双纬度;
双纵;
字符串nameFirst1;
名单地址;
地理编码器=新地理编码器(本);
私有静态最终字符串标记\u ID=“ID”;
私有静态最终字符串标记_FIRSTNAME=“nameFirst”;
私有静态最终字符串标记_LASTNAME=“nameLast”;
私有静态最终字符串标记\u EMAIL=“emailAddress”;
私有静态最终字符串标记\u ADDRESS=“streetAddress”;
私有静态最终字符串标记_STATE=“STATE”;
专用静态最终字符串标记_PHONE=“PHONE”;
JSONArray联系人=null;
私有静态类LocationData{
私人双lat;
私人双经度;
私有字符串名称;
公共位置数据(双纬度、双经度、字符串名称){
this.lat=lat;
这个经度=经度;
this.name=名称;
}
公共无效设置lat(双lat){
this.lat=lat;
}
公共经度(双经度){
这个经度=经度;
}
公共双getLat(){
返回lat;
}
公共双getLongitude(){
返回经度;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
}
LocationData数据=新的LocationData(lati、longi、nameFirst1);
@SuppressLint(“新API”)
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.maps);
mMap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
如果(mMap!=null){
mMap.setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
mMap.setMyLocationEnabled(真);
mMap.animateCamera(CameraUpdateFactory.zoomBy(17));
}
LocationManager LocationManager=(LocationManager)getSystemService(LOCATION\u服务);
标准cr=新标准();
字符串提供程序=locationmanager.getBestProvider(cr,true);
Location Location=locationmanager.getLastKnownLocation(提供者);
locationmanager.RequestLocationUpdate(提供程序,20,0,(LocationListener)this);
mMap.moveCamera(CameraUpdateFactory.newLatLng((newLatLng(location.getLatitude(),location.getLongitude())));
新的EndpointsTask().onProgressUpdate(数据);
mMap.addMarker(新标记选项()
.position(新LatLng(data.getLat(),data.getLongitude())
.名称(“香蕉”);
}
公共类EndpointsTask扩展异步任务{
private List locationList=new ArrayList();
公共长文档背景(上下文…上下文){
Contactinfoendpoint.Builder endpointBuilder=新建Contactinfoendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
新JacksonFactory(),
新的HttpRequestInitializer(){
公共无效初始化(HttpRequest HttpRequest){}
});
Contactinfoendpoint=CloudEndpointUtils.updateBuilder(
endpointBuilder.build();
试一试{
字符串apples=endpoint.listContactInfo().execute().toString();
JSONObject jObject=新的JSONObject(苹果);
JSONArray jsonArr=jObject.getJSONArray(“项目”);

对于(int i=0;i您现在仍然没有做我多次告诉您要做的事情

AsyncTask
中,创建
LocationData

ArrayList points = new ArrayList<LocationData>();
然后在
onPostExecute
中循环列表并绘制点

for(LocationData data : points){
    mMap.addMarker(new MarkerOptions()
     .position(new LatLng(data.getLat(), data.getLongitude()))
     .title("banana"));
}

您需要以
newendpointstask()的形式启动AsyncTask。执行(FinderActivity.this)谢谢你的帮助。我确实按照你的方式完成了。但是我想我可以通过onProgressUpdate将数据传递到UI来完成。不能这样做吗?按照你希望的方式完成吗?不,你不能,你需要创建一个对主活动的回调。但是你已经在UI中,然后你就进入了
onPostExecute
所以这不会有什么区别。你确认你的积分实际上是有效的吗?它工作得很好。我将一些地址上传到app engine数据存储,它们显示在应该显示的位置。再次感谢你的帮助。我从stackoverflow中学到了很多。
for(LocationData data : points){
    mMap.addMarker(new MarkerOptions()
     .position(new LatLng(data.getLat(), data.getLongitude()))
     .title("banana"));
}