2013-02-20 1 views
0

В настоящее время я пытаюсь перенести мою активность в OSMDroid на фрагменты. Кажется, что все настроено правильно, но я получаю это странное исключение NullPointerException, которое я не уверен в решении.NulPointerException at maps.y.p.onResume (Неизвестный источник) о реализации фрагментов для OSMDroid

02-20 23:59:36.140: E/AndroidRuntime(970): FATAL EXCEPTION: main 
02-20 23:59:36.140: E/AndroidRuntime(970): java.lang.NullPointerException 
02-20 23:59:36.140: E/AndroidRuntime(970): at maps.y.p.onResume(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:115) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.os.Binder.transact(Binder.java:297) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onResume(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.maps.SupportMapFragment$a.onResume(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.internal.d$1.a(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.internal.d.a(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.internal.d.onResume(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.google.android.gms.maps.SupportMapFragment.onResume(Unknown Source) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:918) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.os.Handler.handleCallback(Handler.java:605) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.os.Looper.loop(Looper.java:137) 
02-20 23:59:36.140: E/AndroidRuntime(970): at android.app.ActivityThread.main(ActivityThread.java:4511) 
02-20 23:59:36.140: E/AndroidRuntime(970): at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 23:59:36.140: E/AndroidRuntime(970): at java.lang.reflect.Method.invoke(Method.java:511) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
02-20 23:59:36.140: E/AndroidRuntime(970): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
02-20 23:59:36.140: E/AndroidRuntime(970): at dalvik.system.NativeStart.main(Native Method) 
02-20 23:59:36.225: E/android.os.Debug(29093): [email protected] > dumpstate -k -t -n -z -d -o /data/log/dumpstate_app_error 

Вот моя часть моих кодов для класса фрагмента:

public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { 

    final View view = inflator.inflate(R.layout.offline_map_activity, container, false); 


    myOpenMapView = (MapView) view.findViewById(R.id.openmapview); 

    mResourceProxy = new DefaultResourceProxyImpl(getSherlockActivity().getApplicationContext()); 
    myOpenMapView.getTileProvider().clearTileCache(); 

    File aFile = new File(Environment.getExternalStorageDirectory().toString() + 
      "/test/offlineMap/" + tID + ".zip"); 
    IArchiveFile[] myArchives = new IArchiveFile[1]; 
    myArchives[0] = ArchiveFileFactory.getArchiveFile(aFile); 
    MyTileSource myTiles = new MyTileSource("" + tID, null, 12, 12, 256, ".png"); 
    MapTileModuleProviderBase[] myProviders = new MapTileModuleProviderBase[2]; 
    myProviders[0] = new MapTileFileArchiveProvider(new SimpleRegisterReceiver(getSherlockActivity().getApplicationContext()), 
      myTiles, myArchives); 
    myProviders[1] = new MapTileDownloader(TileSourceFactory.MAPNIK); 
    MapTileProviderArray MyTileProvider = new MapTileProviderArray(myTiles,null, myProviders); 
    TilesOverlay MyTilesOverlay = new TilesOverlay(MyTileProvider, getSherlockActivity().getApplicationContext()); 
    //codes continue... 


    return view; 
} 

Дайте мне знать, если больше кодов должны быть показаны. Благодаря!

+0

Попробуйте прокомментировать все, кроме osmdroid mapview, и посмотрите, можете ли вы запустить его в суперпростой версии. Также, какую версию osmdroid вы используете? В-третьих, рассмотрим использование android mapsv2 вместо osmdroid, поскольку он работает намного лучше в фрагментах и ​​теперь поддерживает пользовательские плитки. – Warpzit

+0

Хорошо, я сначала попытаюсь запустить суперпростую версию ... В настоящее время я использую библиотеку OSMDRoid v3.0.8. Что касается google android maps v2, могу ли я узнать, есть ли пример того, как ее использовать поддерживать пользовательские плитки? Я не могу найти ни одного примера ... = X – lyk

+0

Я сделал то, что вы сказали, но он по-прежнему почти такой же: 02-21 11: 47: 40.523: E/AndroidRuntime (1971): java.lang .NullPointerException 02-21 11: 47: 40.523: E/AndroidRuntime (1971): \t at maps.yponResume (Неизвестный источник) – lyk

ответ

0

То, что я делаю, это создание карты памяти Osmdroid в коде, а не xml. Вы можете попытаться сделать это вместо этого, а затем добавить представление в контейнер, в котором вы хотите, чтобы mapview Osmdroid находился. Таким образом, вы также сможете легко протестировать все.

Пример:

setContentView(R.layout.main); 
    RelativeLayout mapContainer = (RelativeLayout) 
    findViewById(R.id.osm_map_container); 

    final Harbor harbor = getHarbor(); 

    mMapView = new MapView(this, 256); // you can supply other parameters here as well. 
    LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    mMapView.setLayoutParams(params); 
    mapContainer.addView(mMapView); 
+0

Извините, я не очень хорошо справляюсь с OSMDroid в коде ... как мне это сделать? что тогда? – lyk

0

Я думаю, вы можете просто быть в этом отсутствует, зафиксировал его в шахте, что имел подобный вопрос к этому.

super.onCreateView(inflater, container, savedInstanceState);