Android get helper类方法问题



我有一个小问题得到我的助手类的android。我有3类A B C。B扩展了A和C,我试图从B中使用C中的方法,但每次我试图使用它们时都会抛出NullPointerException。

下面是我使用的代码:

在A类中,我有这个:

public class A {
//declaration from class C
C newC;
}

在C类,我有:

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);
        }
}

在B类中,我有:

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);

}

和这行: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

有什么建议吗?

您的上下文为空。

如果你看了堆栈跟踪,你会知道的

同样,没有声明版本。它甚至不能编译。

<标题>编辑

抛出NPE的方法中大约有3个变量。它一定是这些中的一个。所以。或者您的上下文为空(没有在任何地方初始化),或者您的packagemanager为空(非常不可能),或者您的packageinfo为空(也不可能,因为它应该抛出异常)。

我建议你测试这三个,尤其是上下文。

(另外,你的版本字段不是静态的,不能从getPackageVersion访问,它是静态的

最新更新