android - java.lang.RuntimeException : Failure delivering result ResultInfo{who=null, 请求=0,结果=-1,数据= Intent

标签 android nullpointerexception

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

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,这样我就不会得到 null 异常,但它仍然保持不变。

主 fragment 的代码块

    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();
            }

        } 
                }

最佳答案

您正在使用 fragment 并且在 onCreate 中使用 EditText 而不是在 fragment 的 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 中的全局变量,而不是 Activity,您应该在 Fragment 中实现 onActivityResult。

关于android - java.lang.RuntimeException : Failure delivering result ResultInfo{who=null, 请求=0,结果=-1,数据= Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24413906/

相关文章:

android - 收听后台服务中的音量按钮?

java - ViewRootImpl.setPausedForTransition(boolean) NullPointerException 在 ActivityTransitionCoordinator 中转换到其他 Activity 调用过早

java - 更改 Android DatePicker 的字体颜色

Android - 在 html webview 中添加图像

android - 如何在长按 ListView 中的项目时显示新 View ?

android - 为什么 sendBroadcastAsUser(intent,userHandle) 即使与 Android 5.0 中的设备所有者一起工作也不起作用?

android - 如果您在 onAnimationEnd 上移除子项,ViewAnimator 的 OnDraw 将抛出 NullPointerException

android - parseSdkContent 失败无法初始化类 android.graphics.Typeface

android - 为什么在添加线性布局 (Android) 时会出现空指针异常?

hash - 访问子元素时避免检查 nil