java.lang.InstanceionException:类没有零参数构造函数错误

java.lang.InstanceionException:类没有零参数构造函数错误,java,android,broadcastreceiver,android-broadcast,android-broadcastreceiver,Java,Android,Broadcastreceiver,Android Broadcast,Android Broadcastreceiver,我已经阅读了其他存在的线程,但是没有一个能够解决我的问题 我正在开发一个应用程序,在没有互联网的情况下缓存消息并将其存储到数据库中。这个想法是当有网络连接时,它从数据库中提取数据并在后台发送消息——为此我制作了一个广播接收器,让它接收“android.net.conn.CONNECTIVITY_CHANGE”广播——然后让应用程序将消息发布到服务器 网络更改时出现的错误: java.lang.RuntimeException: Unable to instantiate receiver com

我已经阅读了其他存在的线程,但是没有一个能够解决我的问题

我正在开发一个应用程序,在没有互联网的情况下缓存消息并将其存储到数据库中。这个想法是当有网络连接时,它从数据库中提取数据并在后台发送消息——为此我制作了一个广播接收器,让它接收“android.net.conn.CONNECTIVITY_CHANGE”广播——然后让应用程序将消息发布到服务器

网络更改时出现的错误:

java.lang.RuntimeException: Unable to instantiate receiver com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver: java.lang.InstantiationException: java.lang.Class<com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver> has no zero argument constructor
按要求进行堆栈跟踪:

04-05 16:36:29.828 3420-3420/com.tanvirsingh.fragmentsdemo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.tanvirsingh.fragmentsdemo, PID: 3420
                                                                             Theme: themes:{default=overlay:system, iconPack:com.baranovgroup.nstyle, fontPkg:com.baranovgroup.nstyle, com.android.systemui=overlay:com.baranovgroup.nstyle, com.android.systemui.navbar=overlay:system}
                                                                             java.lang.RuntimeException: Unable to instantiate receiver com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver: java.lang.InstantiationException: java.lang.Class<com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver> has no zero argument constructor
                                                                                 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2752)
                                                                                 at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5471)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                                 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
                                                                              Caused by: java.lang.InstantiationException: java.lang.Class<com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver> has no zero argument constructor
                                                                                 at java.lang.Class.newInstance(Native Method)
                                                                                 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2747)
                                                                                 at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440) 
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                 at android.os.Looper.loop(Looper.java:148) 
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5471) 
                                                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                                 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102) 
04-05 16:36:29.828 3420-3420/com.tanvirsingh.fragmentsdemo E/AndroidRuntime:致命异常:main
进程:com.tanvirsingh.fragmentsdemo,PID:3420
主题:主题:{default=overlay:system,iconPack:com.baranovgroup.nstyle,fontPkg:com.baranovgroup.nstyle,com.android.systemui=overlay:com.baranovgroup.nstyle,com.android.systemui.navbar=overlay:system}
java.lang.RuntimeException:无法实例化receiver com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver:java.lang.InstanceionException:java.lang.Class没有零参数构造函数
位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2752)
位于android.app.ActivityThread.-wrap14(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5471)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
位于de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
原因:java.lang.InstanceException:java.lang.Class没有零参数构造函数
位于java.lang.Class.newInstance(本机方法)
位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2747)
位于android.app.ActivityThread.-wrap14(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5471)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
位于de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)

广播接收器
片段
相同,与许多其他类相同,应该具有无参数的默认构造函数

只需添加默认构造函数:

public NetworkChangeReceiver() {
}
这是因为Android系统知道类及其包的名称,但对其参数一无所知。 它使用反射,类似

   Class c = Class.forName(className);
   YourBroadcastReceiver broadcastReceiver = (YourBroadcastReceiver)c.newInstance();
如果没有默认值,constgrutor newInstance()将生成错误

UPD:


在您的情况下,您应该从BroadcastReceiver中删除
SendMessageFromDB
方法以分离类

你能添加完整的StackTrace吗?这可能会提示异常发生的位置。除此之外,您的类似乎正在某个地方使用反射进行实例化。只有当您有一个没有参数的构造函数时,这才有效。不幸的是,您对
处理程序的引用将不起作用。请删除您的单参数构造函数。除此之外,这些代码实际上都不属于
BroadcastReceiver
,因为您的进程可能在
onReceive()
返回后的毫秒内终止,并且您占用了太多的主应用程序线程。我不能这样做。由于我使用的是client.posts-onSuccess方法所需的处理程序,您能否详细介绍一下我发布的内容?也许是一个书面的例子?Android系统实例化你的broacast接收器
   Class c = Class.forName(className);
   YourBroadcastReceiver broadcastReceiver = (YourBroadcastReceiver)c.newInstance();