【问题标题】:Connectivity manager gives null pointer exception in android连接管理器在android中给出空指针异常
【发布时间】:2014-10-18 06:58:34
【问题描述】:

我的代码来检查互联网连接。

public boolean internet() {

    boolean flag = false;
    //context=FindPeopleFragment_revice.this;
//  FindPeopleFragment_revice.context = this;
    ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        NetworkInfo[] info = cm.getAllNetworkInfo();
        if (info != null) {
            if (info[0].getState() == NetworkInfo.State.CONNECTED
                    || info[1].getState() == NetworkInfo.State.CONNECTED) {
                flag = true;

            } else {
                flag = false;
            }
        }

    }
    return flag;
}

当我关闭/打开 Location APIException 在某一点出现:

ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

Ecexption 出现:

08-25 12:47:25.184: E/AndroidRuntime(29169): FATAL EXCEPTION: main
08-25 12:47:25.184: E/AndroidRuntime(29169): Process: info.staffmark, PID: 29169
08-25 12:47:25.184: E/AndroidRuntime(29169): java.lang.NullPointerException
08-25 12:47:25.184: E/AndroidRuntime(29169):    at info.staffmark.FindPeopleFragment_revice.internet(FindPeopleFragment_revice.java:1210)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at info.staffmark.FindPeopleFragment_revice.onLocationChanged(FindPeopleFragment_revice.java:1822)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at com.google.android.gms.internal.jg$a.handleMessage(Unknown Source)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at android.os.Looper.loop(Looper.java:146)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at android.app.ActivityThread.main(ActivityThread.java:5511)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at java.lang.reflect.Method.invokeNative(Native Method)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at java.lang.reflect.Method.invoke(Method.java:515)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
08-25 12:47:25.184: E/AndroidRuntime(29169):    at dalvik.system.NativeStart.main(Native Method)

OnLocation 更改方法:

@Override
    public void onLocationChanged(android.location.Location location) {
        // TODO Auto-generated method stub

    //  internet = internet();
        internet = cd.isConnectingToInternet();

        Log.d("Net Status is", "Net is " + internet);   
        if (internet) {

        Double Latitude=location.getLatitude();
        Double Longitude=location.getLongitude();

        variable.CurrentLat=Latitude;
        variable.CurrentLong=Longitude;

        Log.d("Latitude is", ""+Latitude);

        Log.d("Longitude is", ""+Longitude);

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        final Geocoder gcd = new Geocoder(getActivity().getApplicationContext());

        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(Latitude, Longitude, 10);

            for (Address address : addresses) {
                if(address.getPostalCode()!=null){
                       // Log.d("licality",address.getLocality());
                        Log.d("postalcode","Postal Code is"+address.getPostalCode());
                        variable.currentZip=address.getPostalCode();

                        internet = internet();
                        if (internet) {

                            if(variable.LocationType.equals("")){
                                internet=internet();
                                if(internet){
                                if(LocationType.equals("")){
                                    Location(); 
                                }
                                }else{
                                    Toast.makeText(getActivity(), "Internet service is not available in your device.", Toast.LENGTH_LONG).show();
                                }
                            }else{
                                 internet=internet();
                                 if(internet()){
                                     Data();     
                                     ShowMarkerMap();
                                 }else{
                                     Toast.makeText(getActivity(), "Internet service is not available in your device.", Toast.LENGTH_LONG).show();
                                 }}

                        } else {
                            Toast.makeText(getActivity(),"Internet service is not available in your device.",Toast.LENGTH_LONG).show();
                        }
                }
                }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


     }

    }

在检查互联网连接时位置更改方法出现异常。

我很困惑如何解决这个问题。

请帮我解决这个问题,谢谢。

【问题讨论】:

  • 包括堆栈跟踪...您是否请求访问网络状态的权限?
  • 什么是行FindPeopleFragment_revice.java:1210
  • 这是在 1210 上:ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
  • 我认为 getActivity() 正在返回 null。你能检查一下并修复它吗?

标签: android connection android-location


【解决方案1】:

如果此代码位于片段的 oncreate() 中,请尝试将其放入 onActivityCreated()。 我的猜测:getActivity 返回 null。 你至少应该把你的堆栈跟踪放在你的问题中。

检查:http://developer.android.com/reference/android/app/Fragment.html#onCreate(android.os.Bundle)

它告诉你: “请注意,可以在片段的活动仍在创建过程中时调用它。因此,您不能依赖此时正在初始化活动的内容视图层次结构之类的东西。如果您想在活动完成后工作本身是创建的,见 onActivityCreated(Bundle)。”

【讨论】:

  • 请帮助解决这个问题。如果您有任何想法
  • 你能发布你的 OnLocationChanged 代码吗?你在哪里设置 LocationChangedListener ?在 Oncreate 中?
  • 我正在使用片段所以调用 onCreateView()
  • 我还是猜你把你的听众放在了错误的位置。尝试将其放入 onactivitycreated 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多