Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java构造函数NullPointerException问题_Java_Android_Constructor_Nullpointerexception - Fatal编程技术网

Java构造函数NullPointerException问题

Java构造函数NullPointerException问题,java,android,constructor,nullpointerexception,Java,Android,Constructor,Nullpointerexception,我在理解如何创建子类的构造函数(它扩展父类)时遇到了一些问题。下面是我使用的代码: 父类构造函数: public RPCPacket( int apacketId, RPCPacketType apacketType, RPCOperationType aoperationType, String tmpPacket_objectOid,

我在理解如何创建子类的构造函数(它扩展父类)时遇到了一些问题。下面是我使用的代码:

父类构造函数:

public RPCPacket(   int apacketId,
                        RPCPacketType apacketType,
                        RPCOperationType aoperationType,
                        String tmpPacket_objectOid,
                        int aobjectId,
                        int adataSize,
                        String tmpPacket_dataHash,
                        RPCPacketDataType adataType,
                        byte[] apacketData){


        RPCPacket packet=null;

        switch(apacketType){
            case ST_OBJECT_TYPE_INFO_START:
            {
                packet = new InfoStartRPCPacket();
                break;
            }
            case ST_OBJECT_TYPE_INFO_END:
            {
                packet = new InfoEndRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_INFO_ERROR:
            {
                packet = new InfoErrorRPCPacket();

                break;
            }

                // Basic packets
            case ST_OBJECT_TYPE_COLLECTION:
            {
                packet = new CollectionRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_CATEGORY:
            {
                packet = new CategoryRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_CARD:
            {
                packet = new CardRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_MESSAGE:
            {
                packet = new MessageRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_GENRE:
            {
                packet = new GenreRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_TAG:
            {
                packet = new TagRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_USER:
            {
                packet = new UserRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_CARDSTATS_CATEGORY:
            {
                packet = new CardStatsCategoryRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_CONTENT:
            {
                packet = new ContentRPCPacket();

                break;
            }

                // Media packets
            case ST_OBJECT_TYPE_MEDIA_COLLECTION:
            {
                packet = new MediaCollectionRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_MEDIA_CATEGORY:
            {
                packet = new MediaCategoryRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_MEDIA_CARD:
            {
                packet = new MediaCardRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_MEDIA_TAG:
            {
                packet = new MediaTagRPCPacket();

                break;
            }
            case ST_OBJECT_TYPE_MEDIA_COLLECTION_BUTTON:
            {
                packet = new MediaCollectionButtonRPCPacket();

                break;
            }

                // unknown packet
            default: 
            {
                packet=null;

                break;
            }
        }

    }
子类构造函数:

static int apacketId;
static RPCPacketType apacketType;
static RPCOperationType aoperationType;
static String tmpPacket_objectOid;
static int aobjectId;
static int adataSize;
static String tmpPacket_dataHash;
static RPCPacketDataType adataType;
static byte[] apacketData;

public InfoStartRPCPacket() {
        super(apacketId, apacketType, aoperationType, tmpPacket_objectOid, aobjectId,
                adataSize, tmpPacket_dataHash, adataType, apacketData);//line 46 from LogCat error
    }
以及LogCat例外情况:

09-08 11:18:05.614: WARN/System.err(3376): java.lang.NullPointerException
09-08 11:18:05.614: WARN/System.err(3376):     at com.stampii.stampii.comm.rpc.RPCPacket.<init>(RPCPacket.java:68)
09-08 11:18:05.614: WARN/System.err(3376):     at com.stampii.stampii.comm.rpc.InfoStartRPCPacket.<init>(InfoStartRPCPacket.java:46)
09-08 11:18:05.614: WARN/System.err(3376):     at com.stampii.stampii.comm.rpc.RPCPacket.<init>(RPCPacket.java:71)
09-08 11:18:05.614: WARN/System.err(3376):     at com.stampii.stampii.user.UserLogin$2.onClick(UserLogin.java:122)
09-08 11:18:05.614: WARN/System.err(3376):     at android.view.View.performClick(View.java:2408)
09-08 11:18:05.614: WARN/System.err(3376):     at android.view.View$PerformClick.run(View.java:8817)
09-08 11:18:05.614: WARN/System.err(3376):     at android.os.Handler.handleCallback(Handler.java:587)
09-08 11:18:05.614: WARN/System.err(3376):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-08 11:18:05.614: WARN/System.err(3376):     at android.os.Looper.loop(Looper.java:144)
09-08 11:18:05.614: WARN/System.err(3376):     at android.app.ActivityThread.main(ActivityThread.java:4937)
09-08 11:18:05.614: WARN/System.err(3376):     at java.lang.reflect.Method.invokeNative(Native Method)
09-08 11:18:05.614: WARN/System.err(3376):     at java.lang.reflect.Method.invoke(Method.java:521)
09-08 11:18:05.614: WARN/System.err(3376):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-08 11:18:05.614: WARN/System.err(3376):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-08 11:18:05.624: WARN/System.err(3376):     at dalvik.system.NativeStart.main(Native Method)
09-08 11:18:05.614:WARN/System.err(3376):java.lang.NullPointerException
09-08 11:18:05.614:WARN/System.err(3376):位于com.stampii.stampii.comm.rpc.RPCPacket.(RPCPacket.java:68)
09-08 11:18:05.614:WARN/System.err(3376):位于com.stampii.stampii.comm.rpc.InfoStartRPCPacket.(InfoStartRPCPacket.java:46)
09-08 11:18:05.614:WARN/System.err(3376):位于com.stampii.stampii.comm.rpc.RPCPacket.(RPCPacket.java:71)
09-08 11:18:05.614:WARN/System.err(3376):位于com.stampii.stampii.user.UserLogin$2.onClick(UserLogin.java:122)
09-08 11:18:05.614:WARN/System.err(3376):在android.view.view.performClick(view.java:2408)
09-08 11:18:05.614:WARN/System.err(3376):在android.view.view$PerformClick.run(view.java:8817)
09-08 11:18:05.614:WARN/System.err(3376):位于android.os.Handler.handleCallback(Handler.java:587)
09-08 11:18:05.614:WARN/System.err(3376):位于android.os.Handler.dispatchMessage(Handler.java:92)
09-08 11:18:05.614:WARN/System.err(3376):位于android.os.Looper.loop(Looper.java:144)
09-08 11:18:05.614:WARN/System.err(3376):位于android.app.ActivityThread.main(ActivityThread.java:4937)
09-08 11:18:05.614:WARN/System.err(3376):位于java.lang.reflect.Method.invokenactive(本机方法)
09-08 11:18:05.614:WARN/System.err(3376):位于java.lang.reflect.Method.invoke(Method.java:521)
09-08 11:18:05.614:WARN/System.err(3376):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-08 11:18:05.614:WARN/System.err(3376):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-08 11:18:05.624:WARN/System.err(3376):在dalvik.System.NativeStart.main(本机方法)

有什么建议可以解决我的问题吗?

您似乎没有设置或初始化任何传递到超级构造函数的变量-因此任何对象引用的变量都将为空。

您似乎没有设置或初始化任何传递到超级构造函数的变量-因此任何对象引用的变量都将为空空。

检查代码中的第68行(
RPCPacket.java:68
)。因为这里没有相关的行号,所以我无法理解。似乎您正在访问对象上的某个方法/属性,而没有对其进行初始化。

查看代码中的第68行(
RPCPacket.java:68
)。因为这里没有相关的行号,所以我无法理解。似乎您正在访问对象上的某个方法/属性而没有对其进行初始化。

您的RPCPacketType为null,switch()语句引发null指针异常,因为它无法计算apacketType。

您的RPCPacketType为null,switch()为空语句引发null指针异常,因为它无法计算ApackeType。

您得到NullPointerException是因为(我假设)您没有实例化构造函数中使用的任何静态变量。在调用
InfoStartRPCPacket()
之前,需要传入这些参数的值

然而,对我来说,这看起来像是一个坏的OO,除非您有在子类中使用静态变量的特殊需要,否则我建议您的子构造函数应该使用父类的参数,以便您可以在子类中优雅地使用
超级(…)
构造函数。像这样:

InfoStartRPCPacket(
    int apacketId,
    RPCPacketType apacketType,
    RPCOperationType aoperationType,
    String tmpPacket_objectOid,
    int aobjectId,
    int adataSize,
    String tmpPacket_dataHash,
    RPCPacketDataType adataType,
    byte[] apacketData) {
    super(apacketId, apacketType, aoperationType, tmpPacket_objectOid, aobjectId,
            adataSize, tmpPacket_dataHash, adataType, apacketData);
    //your custom constructor code here
}
这样,在调用构造函数(一种称为顺序耦合的反模式)之前,没有人需要知道如何实例化所有静态类型变量


更好的是,如果您在InfoStartRPCPacket中没有额外的工作要做,那么完全省去子构造函数方法。它将简单地继承父级的构造函数。

您将获得NullPointerException,因为(我假设)您没有实例化构造函数中使用的任何静态变量。在调用
InfoStartRPCPacket()
之前,需要传入这些参数的值

然而,对我来说,这看起来像是一个坏的OO,除非您有在子类中使用静态变量的特殊需要,否则我建议您的子构造函数应该使用父类的参数,以便您可以在子类中优雅地使用
超级(…)
构造函数。像这样:

InfoStartRPCPacket(
    int apacketId,
    RPCPacketType apacketType,
    RPCOperationType aoperationType,
    String tmpPacket_objectOid,
    int aobjectId,
    int adataSize,
    String tmpPacket_dataHash,
    RPCPacketDataType adataType,
    byte[] apacketData) {
    super(apacketId, apacketType, aoperationType, tmpPacket_objectOid, aobjectId,
            adataSize, tmpPacket_dataHash, adataType, apacketData);
    //your custom constructor code here
}
这样,在调用构造函数(一种称为顺序耦合的反模式)之前,没有人需要知道如何实例化所有静态类型变量

更好的是,如果您在InfoStartRPCPacket中没有额外的工作要做,那么完全省去子构造函数方法。它将简单地继承父级的构造函数