2017-04-18 8 views
-3

私はOnMapReadyCallbackを実装するMapActivityの開始時に呼び出されるonMapReady()関数を使用しています。地図上の値が更新されない - Android

これは、項目Iの変更が特定の地域/国の値を更新し、onPostExecute()の後にtitleに反映されるべきスピナーを先頭に含みます。 onPostExecuteまで

すべてのもの()ここで私は、新しい値を表示するには、再びonMapReady(MMAP)関数を呼び出すAsyncTaskの方法ではうまく動作しますが、それは動作しません以下

は私のコードです

void callExchangeRateWebService() { 

     CommonMethods.showProgressDialog(MapsActivity.this, "", "Fetching Exchange Rates..."); 
     new WebServiceCallTask(MapsActivity.this, "" + MantraSoapLinks.URL2+((CountryBean)(mSpinner1.getSelectedItem())).getmCountrySymbol(),"", "GET", "" ,new WebServiceCallBack() { 
      @Override 
      public void onSuccess(Object result) throws JSONException { 
       CommonMethods.hideProgressDialog(MapsActivity.this); 
       JSONObject jObj = new JSONObject(result.toString()); 
       JSONObject ratesObj = jObj.getJSONObject("rates"); 
       String baseStr = jObj.getString("base"); 
       String temp = ratesObj.toString().replace("{",""); 
       temp = temp.toString().replace("}",""); 
       temp = temp.toString().replace("\"",""); 
       temp = temp.toString().replace("\"",""); 

       String[] str= temp.split(","); 
       ArrayList<String> arry = new ArrayList<String>(); 
       for (int i = 0 ;i <str.length;i++) 
       { 
        arry.add(str[i]); 
       } 
       arry.add(baseStr+":1"); 

       String [] str1 = new String[arry.size()]; 
       for (int i = 0 ;i <arry.size();i++) 
       { 
        str1[i] = arry.get(i).toString(); 
       } 

       for(int i = 0 ; i<str1.length ; i++) 
       { 
        CountryBean cn = new CountryBean(); 
        cn.setmCountrySymbol((str1[i].split(":"))[0]); 
        cn.setmCurrencyValueMap((str1[i].split(":"))[1]); 
        db.updateCountryDetails(cn); 
       } 
       beanArry = db.getCountryDetails(); 
       onMapReady(mMap); 

      } 

      @Override 
      public void onFailed(Object result) { 

       CommonMethods.hideProgressDialog(MapsActivity.this); 
      } 
     }).execute(); 

    } 

onMapReady()関数の地図を更新する前に、mMap.clear()を逃し

public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     /*// Add a marker in Sydney and move the camera 
     LatLng sydney = new LatLng(-34, 151); 
     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 


     LatLng testindiA = new LatLng(-20, 150); 
     mMap.addMarker(new MarkerOptions().position(testindiA).title("Yatin Test")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(testindiA));*/ 

     for (int i = 0;i<beanArry.size();i++) 
     { 
      LatLng ltLn = null; 
      if(beanArry.get(i).getmLatitude()!=null) { 
       ltLn = new LatLng(Double.parseDouble(beanArry.get(i).getmLatitude()), Double.parseDouble(beanArry.get(i).getmLongitude())); 

       mMap.addMarker(new MarkerOptions().position(ltLn).title(beanArry.get(i).getmCountryName()+" "+beanArry.get(i).getmCurrencyValueMap())); 


       String str = beanArry.get(i).getmCountryName(); 
       str = str.toLowerCase(); 
       str = str.replace(" ","_"); 
       String PACKAGE_NAME =getApplicationContext().getPackageName(); 
       int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+str , null, null); 
       if(imgId!=0) { 
        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(imgId); 
        mMap.addMarker(new MarkerOptions().position(ltLn).icon(icon)); 
       } 
       else 
       { 
        mMap.addMarker(new MarkerOptions().position(ltLn).icon(null)); 
       } 


       mMap.moveCamera(CameraUpdateFactory.newLatLng(ltLn)); 
      } 
     } 

    } 
+1

あなたは 'onMapReady(mMap);'を呼び出す必要はありません。マーカを普通に追加するだけで、それ自体がリフレッシュされるか、あるいは 'mMap.clear();'を呼び出してマーカを追加します。 –

+0

はいmMap.clear()で動作しました。 – Yatin

答えて

関連する問題