上下文getResources(),找不到资源

时间:2016-10-04 16:56:15

标签: android nullpointerexception

我正在尝试编写一个用于处理map方法的类(showmap,addmarker等),我在Activity或Fragment中调用这些方法,但是我收到了这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

我知道这意味着什么,但我能解决它 所以我希望有人可以帮助我。

这是地图calss:

public class MapHandle extends AppCompatActivity implements LocationListener {

private SupportMapFragment mapFragment;
private GoogleMap map;


public void initMap() {


    mapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
    if (mapFragment != null) {
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap map) {
                createMap(map);
            }
        });
    } else {
        Toast.makeText(this, "Error - Map Fragment was null!!", Toast.LENGTH_SHORT).show();
    }


}

public void createMap(GoogleMap googleMap) {
    map = googleMap;
    if (map != null) {
        // Map is ready
        Toast.makeText(this, "Map Fragment was loaded properly!", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "Error - Map was null!!", Toast.LENGTH_SHORT).show();
    }
}
}

在这里我将其称为活动:

public class FragOne extends Fragment {

MapHandle mh;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    mh = new MapHandle();
    mh.initMap();
    return inflater.inflate(R.layout.frag1,container,false);
}
}

1 个答案:

答案 0 :(得分:0)

您无法使用此

mh = new MapHandle();

Context变为null,因为它现在是一个未受管理的Activity。

您可以使用onAttach(Context context)并转换上下文以获取对父Activity的引用。

或者,FragOne似乎没有任何意义,只能加载地图,因此FragOne加载并显示地图本身(例如extends SupportMapFragment

而且,如下所述,MapHandle似乎不需要是一个活动。主要是因为您没有实施onCreate,否则您将调用initMap