1

アプリを最初にロードしたときにmapActivityが呼び出され、マップが表示されます。ネットワーク接続をオフにしてから再度オンにすると、画面を変更してmapactivityに戻ると、マップにnullが表示され、この行でnullpointer例外が発生しますMapUtils().drawMap(this);onResume()方法。

@Override
protected void onResume() {
    Utils utils = new Utils();
    manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    listener = new ManageLocation();

    listener.setSucessCallBack(this, "setLocation");
    listener.setFailureCallBack(this, "setNoLocation");


    manager.requestLocationUpdates(
            utils.getCurrentPlaceLocationProvider(manager), 0, 0,
            listener);
    super.onResume();

    Log.d(TAG, "Constants.isDataLoadedPAB " + Constants.isMaptobeLoaded
            + " Constants.isDataLoadedPAB : " + Constants.isDataLoadedPAB);
    if (Constants.isMaptobeLoaded) {
        if (Constants.isDataLoadedPAB) {
            try {
                new MapUtils().drawMap(this);
            } catch (Exception e) {
                Log.e(TAG, "Error", e);
            }
        } else {
            if (Constants.currentLocation != null
                    && Constants.searchLocation != null) {
                if (Constants.searchResultData == null) {
                    Constants.searchResultData = new ArrayList<AttractionData>();
                }

                new MapUtils().drawMap(this);

            }
            }
    }
    ((ImageView) activity.findViewById(R.id.left)).setEnabled(true);
    ((ImageView) activity.findViewById(R.id.right)).setEnabled(true);   
    ((ImageView) findViewById(R.id.searchicon)).setEnabled(true);

    ((ImageView) activity.findViewById(R.id.facebookintegration)).setEnabled(true);
}

でもう一度呼び出そうとしてonResume()いますが、それでもnullになります。どこが間違っているのかわからないので、助けていただければ幸いです。

私のログ

01-29 11:23:36.325: E/AndroidRuntime(6668): Caused by: java.lang.NullPointerException
01-29 11:23:36.325: E/AndroidRuntime(6668):     at org.appright.myneighborhood.maps.MapUtils.drawMap(MapUtils.java:59)
01-29 11:23:36.325: E/AndroidRuntime(6668):     at org.appright.myneighborhood.activity.CityAttractions.onResume(CityAttractions.java:505)
01-29 11:23:36.325: E/AndroidRuntime(6668):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1199)
01-29 11:23:36.325: E/AndroidRuntime(6668):     at android.app.Activity.performResume(Activity.java:5280)
01-29 11:23:36.325: E/AndroidRuntime(6668):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2606)
01-29 11:23:36.325: E/AndroidRuntime(6668):     ... 10 more
4

1 に答える 1

1

問題はこの行にあります

FrameLayout topLayout = (FrameLayout) activity.findViewById(R.id.map_container);
                    topLayout.removeAllViews();

MapUtils().drawMap(this);

あなたがしていることは、コンテナからすべてのビューを削除することです。つまりFrameLayout map_containernetwork connection利用できない場合です。

そして、ネットワークが再び来るとき、あなたはあなたがレイアウト階層からMapView削除したにアクセスしています、そしてそれは今度は見つけられず、そして投げます。defaultmapViewNullPionterException

ブロック内のすべてのコードにコメントを付けてelse、トーストのみを表示してみてください。それがうまくいくことを願っています。または、別のロジックを試してください。

于 2013-01-29T06:29:37.863 に答える