【问题标题】:NullPointerException - Android Google Maps Street ViewNullPointerException - Android 谷歌地图街景
【发布时间】:2015-02-24 21:40:12
【问题描述】:

我正在尝试在片段中显示街景。

public class StreetDisplay extends Fragment implements OnStreetViewPanoramaReadyCallback{

SupportStreetViewPanoramaFragment streetFrag;

static final LatLng PosOne = new LatLng(43.771925, -79.512460);

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.street_display, container, false);
    initialize();
    return v;

}

private void initialize() {

    streetFrag =
            (SupportStreetViewPanoramaFragment) getFragmentManager()
                    .findFragmentById(R.id.street);
    streetFrag.getStreetViewPanoramaAsync(this);
}

//this method is needed for using a ViewPager swiping feature
public static StreetDisplay newInstance(){
    StreetDisplay sd = new StreetDisplay();
    return sd;
}

@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
    panorama.setPosition(PosOne);
}
}

这是我在运行应用程序时收到的错误消息

Process: com.example.nikhilbhaskar.mapplayground, PID: 22406
java.lang.NullPointerException
        at com.example.nikhilbhaskar.mapplayground.StreetDisplay.initialize(StreetDisplay.java:43)
        at com.example.nikhilbhaskar.mapplayground.StreetDisplay.onCreateView(StreetDisplay.java:33)

第 33 行是

initialize();

第 43 行是

streetFrag.getStreetViewPanoramaAsync(this);  

我不确定问题是什么 - 你能帮忙吗?

【问题讨论】:

  • 你使用Fragment的支持库吗?
  • 你是说这个吗?导入android.support.v4.app.Fragment;是的,这是我继承的 Fragment 类
  • 尝试把这个:getFragmentManager()改成:getSupportFragmentManager()
  • 但是getSupportFragmentManager()是FragmentActivity类的一个方法。我不能扩展那个类;我需要 Fragment 类,因为我在 ViewPager 中使用这些完全相同的片段来制作屏幕滑动动画
  • 你可以使用:getActivity().getSupportFragmentManager();

标签: java android google-maps nullpointerexception google-street-view


【解决方案1】:
streetFrag =
            (SupportStreetViewPanoramaFragment) getFragmentManager()
                    .findFragmentById(R.id.street);

这个语句可能没有为 StreetFrag 创建对象。

检查 streetFrag 是否为空。

【讨论】:

  • 我刚刚检查过了。你说的对。 streetFrag 为 null 并且该语句不创建对象。知道为什么/如何解决它吗?
  • 这可能会有所帮助。看看这个。stackoverflow.com/questions/10833666/…
【解决方案2】:

我试过官方的文档,效果很好。

我的示例代码:

街景活动

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.StreetViewPanoramaFragment;
import com.google.android.gms.maps.model.LatLng;


public class StreetViewActivity extends FragmentActivity
        implements OnStreetViewPanoramaReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_street_view);
        StreetViewPanoramaFragment streetViewPanoramaFragment =
                (StreetViewPanoramaFragment) getFragmentManager()
                        .findFragmentById(R.id.streetviewpanorama);
        streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
    }


    @Override
    public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
        streetViewPanorama.setPosition(new LatLng(-33.87365, 151.20689));
    }
}

对于activity_street_view.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context="com.bjiang.map_ex.StreetViewActivity">

    <fragment
        android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
        android:id="@+id/streetviewpanorama"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

更多详情请参考here

编辑:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.SupportStreetViewPanoramaFragment;
import com.google.android.gms.maps.model.LatLng;

public class StreetDisplay extends FragmentActivity implements OnStreetViewPanoramaReadyCallback {

    static SupportStreetViewPanoramaFragment streetViewPanoramaFragment;

    static final LatLng PosOne = new LatLng(43.771925, -79.512460);

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.street_display);
        streetViewPanoramaFragment =
                ((SupportStreetViewPanoramaFragment)getSupportFragmentManager().findFragmentById(R.id.street));

        streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
    }

    //this method is needed for using a ViewPager swiping feature
    public static Fragment newInstance(){
        return streetViewPanoramaFragment.newInstance();
    }

    @Override
    public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
        streetViewPanorama.setPosition(new LatLng(-33.87365, 151.20689));
    }

}

【讨论】:

  • bijiang,我也试过这个,对我来说效果很好。但我的例子略有不同。我的类扩展了 Fragment 而不是 FragmentActivity,因为这个片段在 ViewPager(连同其他 2 个片段)中用于 ViewPager 中的水平滑动/屏幕滑动功能。此处示例:developer.android.com/training/animation/screen-slide.html
  • 我尝试了一个小时,但没有运气,我发布了我在 EDIT 中尝试过的最好的代码,this 是我能找到的最好的......
  • 谢谢 bijiang,我会检查那个链接 - 非常感谢你的帮助 :)
【解决方案3】:

在片段内使用getChildFragmentManager()

streetFrag = (SupportStreetViewPanoramaFragment) getChildFragmentManager()
                                                    .findFragmentById(R.id.street);

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多