2013-06-05 3 views
-1

Мой класс приложения - это действие, чтобы получить контекст использования и использовать его else where.isOnline вызывается из некоторого класса JSONParser, который не является активностью. isOnline вызывается getJSONFromUrl(). Тест - метод B class.test() вызывается активностью LoginActivity. Однако я получаю nullpoint и не понимаю, почему. это потому, что я использую контекст gtting неправильно или я передаю контекст ConnectivityManager неактивно или что-то еще? метод isOnlinenull Указатель исключения для ConnectivityManager

private static Boolean isOnline(){ 

     context = MyApplication.getAppContext(); 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) { 
       for (int i = 0; i < info.length; i++) { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
        } 
       } 
      } 
     } 
     return false; 
    } 

myaplication класс

public class MyApplication extends Application{ 

    private static Context context; 

    public void onCreate(){ 
     super.onCreate(); 
     MyApplication.context = getApplicationContext(); 
    } 

    public static Context getAppContext() { 
     return MyApplication.context; 
    } 
} 

ошибка

06-05 09:29:22.104: D/dalvikvm(526): GC_EXTERNAL_ALLOC freed 1033 objects/82800 bytes in 52ms 
06-05 09:29:52.734: D/[email protected](526): emails 
06-05 09:29:56.414: D/f(526): onItemSelected 

06-05 09:30:00.446: W/KeyCharacterMap(526): No keyboard for id 0 
06-05 09:30:00.446: W/KeyCharacterMap(526): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
06-05 09:30:01.814: D/parsing data to login(526): true 
06-05 09:30:01.824: W/dalvikvm(526): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 
06-05 09:30:01.824: E/AndroidRuntime(526): FATAL EXCEPTION: Thread-10 
06-05 09:30:01.824: E/AndroidRuntime(526): java.lang.NullPointerException 
06-05 09:30:01.824: E/AndroidRuntime(526): at ua.mirkvartir.android.frontend.adapter.JSONParser.isOnline(JSONParser.java:87) 
06-05 09:30:01.824: E/AndroidRuntime(526): at ua.mirkvartir.android.frontend.adapter.JSONParser.getJSONFromUrl(JSONParser.java:114) 
06-05 09:30:01.824: E/AndroidRuntime(526): at ua.mirkvartir.android.frontend.UserFunctions.loginUser(UserFunctions.java:51) 
06-05 09:30:01.824: E/AndroidRuntime(526): at ua.mirkvartir.android.frontend.LoginActivity$1$1.run(LoginActivity.java:144) 
06-05 09:30:01.824: E/AndroidRuntime(526): at java.lang.Thread.run(Thread.java:1096) 
+0

Можете ли вы разместить весь логарифм? –

+0

класс B в описании JSONParser и активность A - это LoginActivity – Yarh

+0

Хорошо, можете ли вы рассказать мне, в какой строке соответствует LoginActivity.java:144? Это где вы создаете экземпляр ConnectivityManager? Есть ли у вас права в вашем манифесте?

ответ

0

ваш контекст подходит к нулю. передать контекст приложения в свой метод, а затем использовать этот контекст для рефери .. он будет работать нормально

0

Изменение:

MyApplication.context = getApplicationContext(); 

в

MyApplication.context = this; 
+0

. Я думал, что MyApplication.getAppContext(); даст мне правильный контекст, не так ли? – Yarh

0

Выполните следующие вещи, если вы еще не сделали:

1. Добавьте свой класс приложения в манифесте на ваше имя приложения, как это

<application 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:name=".MyApplication" 

2. Add ACCESS_NETWORK_STATE разрешение

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
Смежные вопросы