【问题标题】:java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intentjava.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=0, result=-1, data=Intent
【发布时间】:2014-06-26 19:35:28
【问题描述】:

我正在创建一个从条形码读取初始任务的应用程序。下面是代码块和产生的错误

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {com.example.knr/com.example.knr.MainActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3351)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
    at android.app.ActivityThread.access$1300(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    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:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at com.example.knr.MainActivity.onActivityResult(MainActivity.java:84)
    at android.app.Activity.dispatchActivityResult(Activity.java:5423)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)

一切正常,当我单击按钮时,我打开条形码扫描仪,但一旦我完成扫描,我就会收到此错误。我试图启动一个 else 以便我不会得到一个空异常,但它仍然保持不变。

主片段的代码块

    public class MainFragment extends Fragment {

                 public View onCreateView (LayoutInflater inflater, ViewGroup container,
                                             Bundle savedInstanceState) {
                        // Inflate the layout for this fragment
                        View view = inflater.inflate(R.layout.fragment_main, container, false);
                        Button button = (Button) view.findViewById(R.id.button);


        Button scan1 = (Button) view.findViewById(R.id.Scan);
                            final EditText et = (EditText) view.findViewById(R.id.editText); // also serves //toinput code scanned from barcode scanner

        scan1.setOnClickListener(new View.OnClickListener() {

                  public void onClick(View v) {
                   // Intent intent = new Intent("com.google.zxing.client.android.SCAN");
             //   getActivity().startActivityForResult(intent, 0);

                IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
                scanIntegrator.initiateScan();
              }
          });

                  button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                 // do some stuff for another button click and check for conditions

            }
                });
                return view
                }

@Override
              public void onActivityResult (int requestCode, int resultCode, Intent intent) {
            //retrieve scan result
            //super.onActivityResult(requestCode, resultCode, intent);
            IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
            if (scanningResult != null) {
                //we have a result

                String scanContent = scanningResult.getContents();
                //contentTxt.setText("CONTENT: " + scanContent);
                Toast toast = Toast.makeText(getActivity(), 
                        scanContent, Toast.LENGTH_SHORT);
                    toast.show();
                //et1.setText(scanContent);
                }
            else{
                Toast toast = Toast.makeText(getActivity(), 
                    "No scan data received!", Toast.LENGTH_SHORT);
                toast.show();
            }

        } 
                }

【问题讨论】:

  • MainActivity 的第 84 行是什么?
  • 第 84 行是 et1.setText(barcont);

标签: android nullpointerexception


【解决方案1】:

您正在使用片段,并且您在 onCreate 中使用 EditText 而不是在片段的 onCreateView 中使用。稍后在 onActivityResult 你调用 et1.setText(barcont);在那里你得到空值。

试试:

public static class MainFragment extends Fragment {

    EditText et1;

    public MainFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.fragment_display_grup,
            container, false);

        et1 = (EditText) rootView.findViewById(R.id.editText);
        return rootView;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) {

                String contents = intent.getStringExtra("SCAN_RESULT");
                barcont=contents;
                Log.d(TAG,barcont);
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                Log.d(TAG,format);
                barfor=format;
            }
            else{
                Toast toast = Toast.makeText(getActivity(), 
                    "No data received!", Toast.LENGTH_SHORT);
                toast.show();}
        }

        et1.setText(barcont);
    }
}

另外,et1 应该是 Fragment 中的全局变量,而不是活动,你应该在 Fragment 中实现 onActivityResult。

【讨论】:

  • 我尝试将 et1 放在片段中,但它仍然没有帮助。我在 et.setText(barcont) 得到一个空点异常
  • 你能帮助我如何在片段中包含 onActivityResult 吗?或者是否可以在它之外设置edittext字段?
  • 我编辑了答案。我希望它会帮助你。从活动中删除 onActivityResult 并将其添加到片段中。它没有太多改变(getActivity() 而不是 getApplicationContext())。另外,在片段中包含 et1...
  • 您是否建议我从 MainActivity 中删除 onActivityResult 并将其放在 Fragment 中?但不是 onActivityResult 链接到 MainActivity 中的按钮单击。当我将它放在片段中时,该函数没有被解析。
  • 您确定您的按钮处于活动状态,因为您的 et1 在片段中吗?您的按钮是在活动布局中还是在片段布局中?
【解决方案2】:

您没有正确初始化您的编辑文本:

final EditText et1 = (EditText) findViewById(R.id.editText);

应该是:

et1 = (EditText) findViewById(R.id.editText);

因为 et1 是一个成员变量。

【讨论】:

    【解决方案3】:

    解决了,

    调用 Activity 以在 MainFragment 外部写入 EditText 的替代或迂回路线是在 MainActivity 中声明一个变量,并通过仅将值传递给该变量来将该变量分配给 Fragment 中的 EditText。

    例如说你需要的字符串或变量是

    String X1= "output of barcode scanner"
    

    然后

    import com.example.yourpackaganame.yourclassname 
    

    进入您的 Fragment 类并通过

    调用它
    et.setText(yourclassname.X1)
    

    对我来说非常好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多