2014-02-06 60 views
2

引言獲取活動和片段之間的數據與GOOGLEMAPS

嗯,我有具有主要活動:

  • 1按鈕啓動谷歌地圖API
  • 2 EDITTEXT顯示緯度和經度座標

我mannage使用智能手機或平板電腦,所以我使用片段的地圖。當我使用平板電腦時,它會在主要活動的右側(我在XML文件中使用framelayout)顯示地圖,並且當我使用智能手機時,它會引發用Map顯示新活動的意圖。

但是,由於MapsFragment不是一個活動,我無法用意圖調用它,因爲我創建了一箇中間活動。

的結構是這樣的:MainActivity(GeocodingActivity) -> GoogleMapsActivity-> GoogleMapsFragment

功能,

使用該應用的是簡單的。當我點擊地圖按鈕時,它會啓動googleMaps。在那裏,我點擊地圖上的任何位置,它必須將該位置的座標返回到主Activity並在edittext中顯示它們。

CODE

這是我用來啓動谷歌地圖代碼:

/**ON BUTTON CLICK IN MAIN ACTIVITY*/ 
Intent intent = new Intent(); 
intent.setClass(GeocodingActivity.this, GoogleMapsActivity.class); 
startActivityForResult(intent, REQUEST_CODE_MAP_LOCATION); 

/**IN GOOGLEMAPSACTIVITY'S ONCREATE METHOD*/ 
GoogleMapsFragment mapsFragment = new GoogleMapsFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(android.R.id.content, mapsFragment).commit(); 

將數據從GoogleMapsFragment發送回mainActivity:

/**ON MAP LONG CLICK STARTS RETURNMAPDATA METHOD*/ 
mMap.setOnMapLongClickListener(new OnMapLongClickListener() { 
    @Override 
    public void onMapLongClick(LatLng arg0) { 
     mLatLng = arg0; 
     ReturnMapData(mLatLng); 
    } 
}); 

/**METHOD THAT RETURNS DATA FORM GOOGLEMAPSFRAGMENT TO MAINACTIVITY*/ 
public void ReturnMapData(LatLng arg) { 
    Intent intent = new Intent(); 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("maps_location", arg); 
    intent.putExtra("bundle", bundle); 
    getActivity().setResult(getActivity().RESULT_OK, intent); 
} 

和ANT最後接收MainAcitivty中的數據與onActivityResult方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_CODE_MAP_LOCATION) { 
      if(resultCode == RESULT_OK){ 
       Bundle bundle = data.getBundleExtra("bundle"); 
       LatLng coordinates = bundle.getParcelable("maps_location"); 
       mLocation.setLatitude(coordinates.latitude); 
       mLocation.setLongitude(coordinates.longitude); 
     } 
    } 
} 

發行

這似乎是一切OK,但是這是我得到的logcat的。這發生在onActivityResult方法中。

02-06 09:26:43.210: E/AndroidRuntime(20541): FATAL EXCEPTION: main 
02-06 09:26:43.210: E/AndroidRuntime(20541): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { cmp=com.uax_final.reversegeocoding/.GoogleMapsActivity (has extras) }} to activity {com.uax_final.reversegeocoding/com.uax_final.reversegeocoding.GeocodingActivity}: java.lang.NullPointerException 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread.deliverResults(ActivityThread.java:3500) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3543) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread.access$1200(ActivityThread.java:159) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.os.Looper.loop(Looper.java:137) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread.main(ActivityThread.java:5419) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at java.lang.reflect.Method.invokeNative(Native Method) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at java.lang.reflect.Method.invoke(Method.java:525) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at dalvik.system.NativeStart.main(Native Method) 
02-06 09:26:43.210: E/AndroidRuntime(20541): Caused by: java.lang.NullPointerException 
02-06 09:26:43.210: E/AndroidRuntime(20541): at com.uax_final.reversegeocoding.GeocodingActivity.onActivityResult(GeocodingActivity.java:232) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.Activity.dispatchActivityResult(Activity.java:5563) 
02-06 09:26:43.210: E/AndroidRuntime(20541): at android.app.ActivityThread.deliverResults(ActivityThread.java:3496) 

更新1 - 更多鈔票原因

我看到的問題是,從GoogleMapsFragment將數據返回到在MainActivity對象是空的,當我認爲這是因爲我使用的結構。

MainActivity(GeocodingActivity) -> GoogleMapsActivity-> GoogleMapsFragment

當我通過將數據從GoogleMapsFragment回MainActivity,活動雙頭呆仍然是GoogleMapsActivity,這就是爲什麼發生這種情況的原因。

現在,事情是...當我請求GoogleMapsFragment中的數據並且我想返回mainActivity時,如何關閉GoogleMapsActivity?

回答

0

我自己回答:

問題出在onActivityResult方法。

mLocation對象爲空,所以我不能使用setLatitude和setLongitude方法。

做這將是這樣做的正確方法:

Location position = new Location("Test"); 
position.setLatitude(coordinates.latitude); 
position.setLongitude(coordinates.longitude); 
mLocation = position;