2011-09-15 18 views
0

私はhelperクラスをAndroidで取得することに少し問題があります。私は3つのクラスA、B、Cを持っています。 BはAとCを拡張しています。しかし、それらを使用しようとするたびに、私はNullPointerExceptionをスローします。ここでAndroid get helperクラスメソッドの問題

は、私が使用しているコードです:

をクラスAIでは、この持っている:クラスのCIで

public class A { 

//declaration from class C 
C newC; 

} 

は持っている:クラスBIで

public class C { 

static Context context; 
String version = ""; 
public static int strVerToIntVer(String strLen){ 
     String newStr = strLen.replace(".", ""); 
     int i=Integer.parseInt(newStr); 
     return i; 
    } 

    public static String getPackageVersion(){ 
     try { 

      PackageManager pm = context.getPackageManager(); 
      PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 0); 
      version = packageInfo.versionName; 
     } catch (NameNotFoundException e) { 
      e.printStackTrace(); 
     } 
     return version; 
    } 

    public static boolean checkClientApiVer(String clientApiVer){ 

     int s = C.strVerToIntVer(clientApiVer); 
     int c = C.strVerToIntVer(getPackageVersion()); 

      return (c>=s); 
     } 
} 

があります

public class B extends A { 

C newC; 

serverApiVer = jsonObj.getString("server_api_ver"); 
Log.w("SERVER API VER","SHOW SERVER API VERSION : "+serverApiVer); 

C.checkClientApiVer(serverApiVer); 



} 

とこのlin e:C.checkClientApiVer(serverApiVer);は私にNullPointerExceptionをスローしていますが、それを修正する方法はまだ分かりません。

LogCat:

09-

15 15:47:37.752: WARN/System.err(8150): java.lang.NullPointerException 
09-15 15:47:37.752: WARN/System.err(8150):  at com.stampii.stampii.comm.rpc.C.getPackageVersion(RPCCommunicator.java:1035) 
09-15 15:47:37.752: WARN/System.err(8150):  at com.stampii.stampii.comm.rpc.C.checkClientApiVer(RPCCommunicator.java:1048) 
09-15 15:47:37.752: WARN/System.err(8150):  at com.stampii.stampii.comm.rpc.B.executeBefore(InfoStartRPCPacket.java:103) 
09-15 15:47:37.752: WARN/System.err(8150):  at com.stampii.stampii.user.UserLogin$2.onClick(UserLogin.java:215) 
09-15 15:47:37.752: WARN/System.err(8150):  at android.view.View.performClick(View.java:2408) 
09-15 15:47:37.752: WARN/System.err(8150):  at android.view.View$PerformClick.run(View.java:8817) 
09-15 15:47:37.752: WARN/System.err(8150):  at android.os.Handler.handleCallback(Handler.java:587) 
09-15 15:47:37.752: WARN/System.err(8150):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-15 15:47:37.762: WARN/System.err(8150):  at android.os.Looper.loop(Looper.java:144) 
09-15 15:47:37.762: WARN/System.err(8150):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
09-15 15:47:37.762: WARN/System.err(8150):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-15 15:47:37.762: WARN/System.err(8150):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-15 15:47:37.762: WARN/System.err(8150):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-15 15:47:37.762: WARN/System.err(8150):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-15 15:47:37.762: WARN/System.err(8150):  at dalvik.system.NativeStart.main(Native Method) 
09-15 15:47:37.762: WARN/ERROR(8150): Error - java.lang.NullPointerException 

任意の提案ですか?

+0

多分getPackageVersion()がnullを返します? – MByD

+0

実際に私は、私はそれがnullを返している理由を知っていると思うが、私はそれをどのように修正することができます。** return version; ** try-catchブロック内にあるはずですが、これを行うとエラーの戻り値の型が無効になります –

+0

いいえ、これは原因ではありません。 –

答えて

0

あなたのコンテキストはnullです。

あなたが知っていたなら、スタックトレースを見たでしょうか?

また、バージョンが宣言されていません。コンパイルすべきではありません。

編集

は、のように、NPEをスローする方法で3つの変数があります。それはこれらの一つでなければなりません。そう。コンテキストがnull(どこでも初期化されていない)か、packagemanagerがnull(まれではない)か、packageinfoがnull(どちらかといえば例外を投げるべきであるとは考えにくい)のいずれかです。

3つすべてをテストすることをおすすめしますが、特にコンテキストをテストすることをおすすめします。

は(も、あなたのバージョンフィールドは静的ではなく、静的でgetPackageVersionからアクセスすることはできません

+0

LogCatで私の質問を更新していますバージョンが宣言されていますが、追加するのを忘れてしまいました。 –

関連する問題