【发布时间】:2015-09-14 00:04:18
【问题描述】:
我正在使用 MainActivity 上的导航抽屉,然后我使用此导航抽屉来替换 MainActivity 容器中的不同片段。在片段中,我使用的是谷歌地图。在这个片段中,我还使用 Ion 库从服务器下载一些位置信息并在地图上显示它们。
导航抽屉项目是首页,朋友位置,关于我们
现在当我点击朋友位置时,我想在地图上画图钉,所以我是你 使用与主屏幕相同的主屏幕地图也显示地图。
我在朋友位置项目点击上所做的如下
myMapFragment = new MyMapFragment();
fragmentTransaction1.replace(R.id.frame, myMapFragment, "MyMapFragment").commit();
fragmentManager.executePendingTransactions();
myMapFragment.GetAllFriendsLocation("share",MainActivity.this);
所以 GetAllFriendsLocation 是那个片段中显示地图的方法,这个函数是从服务器下载位置信息,然后在地图上绘制图钉
这就是我的做法
public void GetAllFriendsLocation(String type) {
MainActivity.setOverflowButtonColor(getActivity(),2);
if(cd.isConnectingToInternet()) {
progressDialog.show();
Ion.with(getActivity())
.load("http://myapi.com/data.php")...
但我在以下行收到 nulpointerException
Ion.with(getActivity()) .load("http://myapi.com/data.php").
似乎 getActivity 是空的,因为片段没有完全启动。
所以请给我建议,当它被初始化并准备好在屏幕上显示时,我如何调用片段方法,在它被初始化之后,该方法应该运行并从服务器下载。
或者我能想到的第二个是,在片段初始化之前,如何在 mainactivty 中获取上下文?
请帮帮我..
【问题讨论】:
-
为什么不直接将应用上下文传递给 ion?
-
@bhargav 什么意思,请解释一下
-
getActivity().getApplicationContext(),这永远不会为空,Ion 使用上下文将其网络请求线程与其生命周期联系起来,因此通过传递 applicationCpntext() 唯一的区别是网络请求即使调用了活动 onDestroy(),线程也会运行,只要 applicationContext 仍然处于活动状态。
-
我在调用片段函数时从 mainactivity 传递应用程序上下文,比如说 myMapFragment.GetAllFriendsLocation("locations",this.getApllicationContext) 并通过以下方式在 mapFragment 的函数中获取此上下文public static void GetAllFriendsLocation(String type, Context context) 但仍会在 Ion.with(context) 上获得空指针异常 ....................
-
你不认为 mapfragment 没有完全初始化这就是我收到错误的原因吗?
标签: android android-fragments fragment