[英]Error receiving broadcast Intent caused by java.lang.NullPointerException
I have this code for a Cordova plugin that tries to scan a barcode and send back the result: 我有一个Cordova插件的代码,该插件试图扫描条形码并发送回结果:
public class Scan extends CordovaPlugin {
private CallbackContext callbackContext;
private Intent intentService = new Intent("com.hyipc.core.service.barcode.BarcodeService2D");
private String strBarcode = "";
BroadcastReceiver receiver;
@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
if (action.equals("scan")) {
scan();
return true;
} else {
return false;
}
}
public void scan() {
IntentFilter filter = new IntentFilter();
filter.addAction("action_barcode_broadcast");
if (this.receiver == null) {
this.receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("action_barcode_broadcast")) {
strBarcode = intent.getExtras().getString("key_barcode_string");
callbackContext.success(strBarcode);
}
}
};
cordova.getActivity().startService(intentService);
cordova.getActivity().registerReceiver(this.receiver, filter);
}
}
}
When I run it, my app crashes and I get this in the logs: 当我运行它时,我的应用程序崩溃了,我在日志中得到了它:
07-18 08:53:28.583: E/AndroidRuntime(2345): FATAL EXCEPTION: main
07-18 08:53:28.583: E/AndroidRuntime(2345): java.lang.RuntimeException: Error receiving broadcast Intent { act=action_barcode_broadcast flg=0x10 (has extras) } in com.example.plugin.Scan$1@414f29f0
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:798)
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.os.Handler.handleCallback(Handler.java:800)
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.os.Handler.dispatchMessage(Handler.java:100)
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.os.Looper.loop(Looper.java:194)
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.app.ActivityThread.main(ActivityThread.java:5392)
07-18 08:53:28.583: E/AndroidRuntime(2345): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 08:53:28.583: E/AndroidRuntime(2345): at java.lang.reflect.Method.invoke(Method.java:525)
07-18 08:53:28.583: E/AndroidRuntime(2345): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-18 08:53:28.583: E/AndroidRuntime(2345): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-18 08:53:28.583: E/AndroidRuntime(2345): at dalvik.system.NativeStart.main(Native Method)
07-18 08:53:28.583: E/AndroidRuntime(2345): Caused by: java.lang.NullPointerException
07-18 08:53:28.583: E/AndroidRuntime(2345): at com.example.plugin.Scan$1.onReceive(Scan.java:74)
07-18 08:53:28.583: E/AndroidRuntime(2345): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:788)
07-18 08:53:28.583: E/AndroidRuntime(2345): ... 9 more
07-18 08:53:28.608: E/AppErrorDialog(586): Failed to get ILowStorageHandle instance
07-18 08:53:28.640: E/jdwp(2401): Failed sending reply to debugger: Success
07-18 08:53:29.221: E/AEE/DUMPSTATE(2424): copy_file: Copy /data/anr/2345.hprof to PROCESS_OOME_HPROF failed(2), No such file or directory
07-18 08:53:30.547: E/AEE/DUMPSTATE(2424): copy_file: Copy /proc/gpulog to SYS_GPU_INFO failed(2), No such file or directory
07-18 08:53:33.084: E/AEE/DUMPSTATE(2446): copy_process: execv /system/xbin/proc_mem failed(2), No such file or directory
07-18 08:53:33.097: E/AEE/DUMPSTATE(2447): copy_process: execv /system/bin/dmlog failed(2), No such file or directory
07-18 08:53:34.130: E/jdwp(2401): Failed sending reply to debugger: Success
Line 74, which the log indicates that it's causing the error, is the one in which I'm calling callbackContext.success
method. 第74行(该日志指示该错误导致了错误)是我在其中调用
callbackContext.success
方法的行。 I'm sure that strBarcode
exists, because I can log it in the onReceive
function. 我确定
strBarcode
存在,因为我可以将其记录在onReceive
函数中。
You are just creating an object for CallbackContext
But not initializing it by calling the default constructor for the class.. Thats y the null pointer exception
is occurring 您只是为
CallbackContext
创建一个对象,但没有通过调用该类的默认构造函数来对其进行初始化。那就是y发生了null pointer exception
So try this way 所以这样子
public void scan(CallbackContext context) {
this.callbackContext = context;
IntentFilter filter = new IntentFilter();
filter.addAction("action_barcode_broadcast");
if (this.receiver == null) {
this.receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("action_barcode_broadcast")) {
strBarcode = intent.getExtras().getString("key_barcode_string");
callbackContext.success(strBarcode);
}
}
};
cordova.getActivity().startService(intentService);
cordova.getActivity().registerReceiver(this.receiver, filter);
}
}
This will fix the Null pointer Exception
这将修复
Null pointer Exception
EDIT 编辑
the issue was that the returned callbackContext
and your created callbackContext
are of same name.. So modify the scan()
问题是返回的
callbackContext
和您创建的callbackContext
具有相同的名称。因此,请修改scan()
So that it will look some thing like this 这样看起来会像这样
scan(callbackContext);
and inside the function 在函数内部
public void scan(CallbackContext clBackCtxt) {
this.callbackContext = clBackCtxt;
// your rest code
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.