- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了其他存在的线程,但没有一个能够解决我的问题。
我正在构建一个应用程序,它可以在没有互联网的情况下缓存消息并将它们存储到数据库中。这个想法是当有网络连接时,它从数据库中提取数据并在后台发送消息 - 为此我创建了一个广播接收器并使其接收“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
广播接收器类(NetworkChangeReceiver.java):
public class NetworkChangeReceiver extends BroadcastReceiver{
private static final String TAGNCR = "JSON";
private final Handler handler; // Handler used to execute code on the UI thread
public NetworkChangeReceiver(Handler handler) {
this.handler = handler;
}
DataBaseHelper myDB;
final String MESSAGES_ENDPOINT = "";
@Override
public void onReceive(Context context, Intent intent) {
int[] type = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI};
if (isNetworkAvailable(context) == true){
//check for messages to be sent
myDB = new DataBaseHelper(context);
Cursor res = myDB.getAllData();
if (res.getCount() == 0)
{
Log.d(TAG,"No data found");
return;
}
StringBuffer buffer = new StringBuffer();
while( res.moveToNext()){
buffer.append("Params: " + res.getString(0)+ "\n");
}
Log.d(TAGNCR,buffer.toString());
return;
} else {
}
}
public void SendMessageFromDB(RequestParams param){
AsyncHttpClient client = new AsyncHttpClient();
//pusher
PusherOptions options = new PusherOptions();
options.setCluster("");
Pusher pusher = new Pusher("", options);
Channel channel = pusher.subscribe("my-channel");
channel.bind("my-event", new SubscriptionEventListener() {
@Override
public void onEvent(String channelName, String eventName, final String data) {
System.out.println(data);
}
});
pusher.connect();
final RequestParams params = param;
client.post(MESSAGES_ENDPOINT + "/messages", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
handler.post(new Runnable() {
@Override
public void run() {
Log.d(TAG, params.toString());
}
});
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
//Toast.makeText(, "Something went wrong :(", Toast.LENGTH_LONG).show();
}
});
return;
}
//function to check if internet is available
private static boolean isNetworkAvailable(Context context){
try{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet and not in Airplane mode
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
Toast.makeText(context, activeNetwork.getTypeName() + " Connected", Toast.LENGTH_SHORT).show();
return true;
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile data
Toast.makeText(context, activeNetwork.getTypeName() + " Connected", Toast.LENGTH_SHORT).show();
return true;
}
} else {
// not connected to the internet
Toast.makeText(context, "No internet connection available!", Toast.LENGTH_SHORT).show();
}
} catch (Exception e){
return false;
}
return false;
}
}
根据要求进行堆栈跟踪:
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)
最佳答案
Broadcast Receiver
与 Fragment
相同,并且与许多其他类相同,应该具有不带参数的默认构造函数。
只需添加默认构造函数:
public NetworkChangeReceiver() {
}
之所以如此,是因为 Android 系统知道类及其包的名称,但对其参数一无所知。它使用反射,类似于
Class c = Class.forName(className);
YourBroadcastReceiver broadcastReceiver = (YourBroadcastReceiver)c.newInstance();
如果没有默认构造函数 newInstance() 将生成错误。
更新:
在您的情况下,您应该将 SendMessageFromDB
方法从 BroadcastReceiver 中删除到单独的类中。
关于java.lang.InstantiationException : class has no zero argument constructor error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43229867/
这是我第一次编写 JUnit 测试,遇到了以下问题。我必须为抽象类编写测试,有人告诉我这样做: http://marcovaltas.com/2011/09/23/abstract-class-tes
我编写了以下类,类中的其余代码是@Overrides,请告诉我其余代码是否与此处相关,我将添加它。 public class ListCmd extends LibraryCommand {
我有一个 InstantiationException,我在这里搜索了其他答案和问题,但找不到与我的问题相关的任何内容。该应用程序在 MainActivity 上崩溃,查看 logcat,它给出了一个
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我正在尝试做一个服务示例程序,但出现以下异常 09-10 20:57:57.871: E/AndroidRuntime(280): FATAL EXCEPTION: main 09-10 20:57:
从 hibernate 中获取对象时出现问题。堆栈跟踪是: org.hibernate.InstantiationException: Could not instantiate entity: ma
我有一个项目实体(如下所示)。当我尝试改变 var fullName: String?= null 至: var fullName: String, 我突然从Hibernate收到Instantiat
我这里有一个小问题,需要我一些意见。 这是一个和平的代码 @XmlRootElement public abstract class Article { // quert params and
我正在尝试向我的代码添加异常,以便每当 securityManager 返回 false 时都会引发异常: public Appointment(String date,String time) {
我写了自己的客户转换器: public class MyFancyCustomConverter extends DozerConverter { public MyFancyCustomCo
当我尝试启动 IntentService 时收到 InstantiationException。我在这里查看了其他线程,但答案并没有解决我的问题。我的服务类确实有一个默认构造函数。这是我的服务类。 (
我的理解是,已检查的异常是可以合理预期调用者可以从中恢复的异常。我不明白为什么 InstantiationException 会出现这种情况。如果无法实例化一个类,那么调用者应该做什么? 然后我认为代
我无法创建 B 对象,但为什么? public class AFactory { public int currentRange; private abstract class A {
这个问题在这里已经有了答案: newInstance() with inner classes (3 个答案) 关闭 5 年前。 看下面的代码: public class Outer { p
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Android RuntimeException: Unable to instantiate the serv
我正在尝试在hadoop文件系统上运行我的jar,但遇到此异常 See image 如果我从eclipse运行,我的代码将成功运行。 这是我的亚军主类 public class ReadCas
我想创建一个包含实体的模拟。可以有两种实体:复杂实体和简单实体。当我实例化一个简单的模拟时,我希望实例化简单的实体,当我实例化一个复杂的模拟时,我希望实例化复杂的实体。 实体: class Compl
这个问题已经有答案了: How to instantiate an inner class with reflection in Java? (2 个回答) 已关闭 8 年前。 我正在学习 Java
A.我想使用如下所示的 AlertDialogBox 匿名类创建 Popup: private void showPopupChangeCurrency(final CharSequence[] it
这个问题已经有答案了: Can I use Class.newInstance() with constructor arguments? (9 个回答) 已关闭 6 年前。 我有两个流程,如下所示。
我是一名优秀的程序员,十分优秀!