2017-05-08 11 views
-1

ネイティブAndroidのgetSimOperatorName()getNetworkOperatorName()の機能にアクセスするためのUnityプラグインを作成しようとしています。ヌルオブジェクトリファレンスで仮想メソッド 'getSystemService(java.lang.String)'を呼び出そうとしました

package com.eppz.myplugin; 
import android.app.Application; 
import android.content.Context; 

public class MyApplication extends Application { 

    private static Context mContext; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mContext = getApplicationContext(); 
    } 

    public static Context getContext() { 
     return mContext; 
    } 

エラーログ:

05-08 05:23:26.245 30107-30152/? I/Unity: AndroidJavaException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
     at com.eppz.myplugin.My_Plugin.getMessage(My_Plugin.java:15) 
     at com.unity3d.player.UnityPlayer.nativeRender(Native Method) 
     at com.unity3d.player.UnityPlayer.a(Unknown Source) 
     at com.unity3d.player.UnityPlayer$c$1.handleMessage(Unknown Source) 
     at android.os.Handler.dispatchMessage(Handler.java:98) 
     at android.os.Looper.loop(Looper.java:135) 
     at com.unity3d.player.UnityPlayer$c.run(Unknown Source) 
     at UnityEngine.AndroidJNISafe.CheckException() [0x00000] in <filename unknown>:0 
     at UnityEngine.AndroidJNISafe.CallStaticStringMethod (IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in <filename unknown>:0 
     at UnityEngine.Androi 
+2

[NullPointerExceptionがある、と私はそれをどのように修正すればよいか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-の可能性のある重複i-fix-it) –

+0

AndroidManifest.xmlファイルにアプリケーションクラス名を追加しましたか? '' – eugeneek

+0

私はあなたに質問をしたことに気付きました。この問題は解決されていますか?はいの場合は、それを修正した解決策を受け入れてください。 – Programmer

答えて

0

あなたのAndroid Studioで、私は...あなたは以下を参照してくださいことができ、2クラスで

package com.eppz.myplugin; 
import android.app.Activity; 
import android.content.Context; 
import android.telephony.TelephonyManager; 

public class My_Plugin extends Activity 
{ 
    static Context context = MyApplication.getContext(); 
    static String test = ""; 

    public static String getMessage() 
    { 
     TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)); 

     try { 
      test = telephonyManager.getSimOperatorName(); 
     }catch (Exception e){ 
      test = e.getMessage(); 
     } 
     return test; 
    } 
} 

セカンドクラスをAARのLIBを作成していますMy_Pluginアクティビティが初期化され、static Context context = MyApplication.getContext();が実行された場合、MyApplicationインスタンスはまだ作成されていません。つまり、onCreate()が呼び出されていないため、contextは、MyApplication.getContext()でリクエストするとnullとなります。

あなたはgetMessage()方法自体は、たとえば、終盤にMyApplication.getContext()を呼び出すことで、この問題を解決することができるはずです。

public static String getMessage() 
{ 
    context = MyApplication.getContext(); 
    TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)); 
    // ... 
} 
0

あなたがメソッド「getApplicationContextを(使用して、アクティビティ内からアプリケーション・コンテキストを取得することができます) "この場合は必要ありません。そのため、アクティビティからgetSystemService()メソッドを直接呼び出すことができます。

 public class My_Plugin extends Activity 
     { 
      static String test = ""; 

      public static String getMessage() 
      { 
       TelephonyManager telephonyManager = ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)); 

       try { 
        test = telephonyManager.getSimOperatorName(); 
       }catch (Exception e){ 
        test = e.getMessage(); 
       } 
       return test; 
      } 
     } 
関連する問題

 関連する問題