我有一个带广播接收器的服务库。
我在主应用程序中所做的就是调用服务中的某些方法,没有什么新的。
每次我想运行我的代码时,我都会收到以下内容(请看下面的内容)
错误
02-21 15:51:26.721 31125-31125/com.haswell.phoneduplicator E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.haswell.phoneduplicator, PID: 31125
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3969)
at android.view.View.performClick(View.java:4633)
at android.view.View$PerformClick.run(View.java:19330)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3964)
at android.view.View.performClick(View.java:4633)
at android.view.View$PerformClick.run(View.java:19330)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:94)
at android.widget.Toast.<init>(Toast.java:114)
at android.widget.Toast.makeText(Toast.java:272)
at com.haswell.wifidirectlibrary.wifiDirectService.toastme(wifiDirectService.java:99)
at com.haswell.wifidirectlibrary.wifiDirectService.peerSearch(wifiDirectService.java:151)
at com.haswell.phoneduplicator.sendActivity.authenticateClick(sendActivity.java:52)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3964)
at android.view.View.performClick(View.java:4633)
at android.view.View$PerformClick.run(View.java:19330)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
该服务 - 请注意下面这是更多无效的代码
public void checkWifi(){
toastme("reached peerSearch");
//check if wifi is on
//ERROR HERE ---------------------------------------------
//how can this be null as it is boolean?
if (!isWifiP2pEnabled) {
//peerSearchError = "Wifi is off!";
return;
}
}
isWifiP2pEnabled是一种在发现wifi状态时从广播接收器调用的方法
public void setIsWifiP2pEnabled(boolean WifiP2pEnabled) {
isWifiP2pEnabled = WifiP2pEnabled;
}
这不是所有的广播接收器,但这里是调用上述方法的地方..
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
activity.toastme("wifi is enabled..");
// Wifi Direct mode is enabled
activity.setIsWifiP2pEnabled(true);
} else {
activity.toastme("wifi is not enabled..");
activity.setIsWifiP2pEnabled(false);
}
我不确定发生了什么以及它为什么不这样做,通过它,它检查wifi是否打开,然后成功设置 isWifiP2pEnabled 这很奇怪...我是做错了!isWifiP2pEnabled ?
按要求提供TOASTME
public void toastme(String s){
Toast a;
a = Toast.makeText(this, s, Toast.LENGTH_SHORT);
a.show();
}
AuthenticateClick调用wifiService的地方
public void authenticateClick(View v) {
wifiService.peerSearch();
if (wifiService.peers != null) {
peers = wifiService.peers;
}
Toast s = Toast.makeText(this, peers.toString(), Toast.LENGTH_LONG);
s.show();
}
请注意,该服务正在onCreate上初始化(此外,服务已创建,并且正在此期间运行)
答案 0 :(得分:1)
您正在Service
activity.toastme("wifi is enabled..");
&#34;活动&#34;在您的问题中没有定义或解释。但是,如果你有一个名为&#34; activity&#34;在Service
{} {}} {}} {}} {}} {}}} {{}} {}}} {{}}}它。所以你的活动&#34;变量可能是非null,但这并不意味着它具有有效的上下文。因此,这一行:
Service
可能有一个&#34; null&#34;上下文(以及对Activity
的引用无效)
答案 1 :(得分:1)
在顶部声明服务&#39; //实例化图书馆类wifiDirectService wifiService = new wifiDirectService();&#39;
从不自己创建Service
的实例。从代码中删除此行以及对wifiService
的所有引用。
如果您想提出Toast
,那很好,但使用框架创建的Context
并递交给您。如果活动希望提出Toast
,则活动本身就是一个很好的Context
用于此目的。
如果您真的希望在服务中使用自己的活动呼叫方法,则需要use the binding pattern and bind to the service。