【问题标题】:BroadCast Receiver java.lang.NullPointerException广播接收器 java.lang.NullPointerException
【发布时间】:2016-10-26 05:15:28
【问题描述】:

我正在为捕获条码制作一个 android 应用程序。该应用程序基本上是什么:从导航抽屉中,我选择了一个将我带到片段的项目,在这个片段中有一个微调器和两个文本视图,我选择微调器的产品,在我手动输入公斤并使用捕获阅读器读取条形码后,当它读取代码时将数据发送到数据库,但是当我转到菜单中的另一个项目并执行相同的程序时它读取系统崩溃的条形码并且不挽救任何价值。我已经尝试了两个星期来解决这个问题,但我不知道为什么会发生这种情况,请帮助!

private BroadcastReceiver mSamDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    kilos = edt1.getText().toString().trim();
    if (intent.getAction().equals(SCN_CUST_ACTION_SCODE)) {
        codigo_barras = intent.getStringExtra(SCN_CUST_EX_SCODE);
        edt2.setText(codigo_barras);

        System.out.println(kilos+ " " + codigo_barras+" "+ nombre);

        if (edt2 !=null){

            StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Toast.makeText(getActivity(),R.string.msjeEnvio,Toast.LENGTH_LONG).show();
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getActivity(),error.toString(), Toast.LENGTH_LONG).show();
                        }
                    }){

                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    params.put(CATEGORIA,nombre);
                    params.put(CODIGO,codigo_barras);
                    params.put(KILOS,kilos);
                    return params;
                }

                };

                                Req.getInstance(getActivity()).addToRequestQueue(stringRequest);

10-26 01:52:48.961 5742-5742/cl.parmex.lfigueroa.inventario E/AndroidRuntime: 致命异常: main java.lang.NullPointerException 在 android.widget.Toast.(Toast.java:92) 在 android.widget.Toast.makeText(Toast.java:238) 在 cl.parmex.lfigueroa.inventario.SpinFragment$2$2.onErrorResponse(SpinFragment.java:244) 在 com.android.volley.Request.deliverError(Request.java:598) 在 com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101) 在 android.os.Handler.handleCallback(Handler.java:730) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5136) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 我们可以获取Logcat / Crash log 转储吗?谢谢你
  • 您究竟从哪里获得 NPE?请您提供错误跟踪吗?我想帮忙,但目前还不清楚你的错误在哪里。
  • 您的 getActivity() 可能返回 null
  • @SravanKumar 我认为错误是因为当我转到菜单中的另一个项目并执行相同的过程时,变量为空,我不知道为什么
  • @NouvelTravay 我已经把错误写在代码里了

标签: android broadcastreceiver


【解决方案1】:

您收到 NullPointerException 的原因是因为在回调返回时上下文为空。这是使用 Volley 的主要问题之一。您必须以上下文仍然有效的方式构建程序。我真的会把这部分留给你,但也许你想使用应用程序级别的上下文而不是活动级别的上下文。

注意:如果不清楚,当您使用 getActivity() 时,您实际上是在使用 Activity 级别的上下文。

【讨论】:

  • 我应该怎么做?我虽然在创建类 Req 时已经这样做了。并在 Android Manifest 中声明
  • Toast.makeText(getActivity(),error.toString(), Toast.LENGTH_LONG).show(); 中,您应该尝试getApplicationContext(),而不是使用getActivity()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多