0

編集!

何を考えていたのかわかりませんが、バックグラウンド スレッドで UI を更新することはできません。おっとっと。

マーカーの追加を UI に渡すにはどうすればよいですか?

編集!

API v2 を使用してマップにマーカーを追加しようとしています。onCreate にマーカーを追加すると、正常に動作します。住所情報を取得する場所のすぐ下にある EndpointsTask にマーカーを追加し、それを緯度経度値に変換すると、マーカー ポイントは追加されません。

マーカーを追加するコードは次のとおりです。

mMap.addMarker(new MarkerOptions()
    .position(new LatLng(lati, longi))
    .title("Hello world")); 

onCreateに実際のdouble値を入れるとうまくいきます。endpointstask で double 値を使用してもまったく機能しません (以下を参照)。ご参考までに、コンソールに緯度経度値を送信したところ、緯度経度が正常に出力されました。

public class FinderActivity extends Activity implements LocationListener  {

    GoogleMap mMap;
    Location myLocation;
    EditText length;
    String lengthString;
    LocationManager locationmanager;
    //Spinner s;

    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;

    @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()))));

        //WORKS HERE

        //mMap.addMarker(new MarkerOptions()
        //.position(new LatLng(38.923546, -83.582954))
        //.title("Hello world"));   



        new EndpointsTask().execute(getApplicationContext());

    }

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

        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);
                            if (address == null) {
                                return null;
                            }
                            Address location1 = address.get(0);
                           double lati = location1.getLatitude();
                            double longi = location1.getLongitude();


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

                             // DOESNT WORK HERE

                           mMap.addMarker(new MarkerOptions()
                             .position(new LatLng(lati, longi))
                             .title("Hello world"));    

         }

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

1 に答える 1