【问题标题】:After scanning the QR code normally, it stops running and cannot display the scanned content:正常扫描二维码后停止运行,无法显示扫描内容:
【发布时间】:2020-03-13 05:20:25
【问题描述】:

正常扫描二维码后,停止运行,无法显示扫描到的内容。

条码扫描器 (Main2Activity.java):

package com.example.barcodescanner;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

import com.google.zxing.Result;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class Main2Activity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
    private ZXingScannerView mScannerView;
    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        setContentView(mScannerView);                // Set the scanner view as the content view
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here

        MyFragment.textViewQr.setText(rawResult.getText());
        onBackPressed();

    }
}

这是我使用上述 (MyFragment.java) 的片段:

package com.example.barcodescanner;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.fragment.app.Fragment;


/**
 * A simple {@link Fragment} subclass.
 */
public class MyFragment extends Fragment {
    public MyFragment() {
        // Required empty public constructor
    }
    static TextView textViewQr;

    Button buttonScanner;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        final View view = inflater.inflate(R.layout.fragment_my,container,false);

        final TextView textViewQr = (TextView) view.findViewById( R.id.textViewQr );

        final Button buttonScanner = (Button) view.findViewById( R.id.buttonScanner );
        buttonScanner.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {

              startActivity( new Intent( getActivity(), Main2Activity.class ) );

            }
        } );


        return view;
    }
}

Logcat:

  2020-03-13 10:54:50.267 20894-20927/com.example.Barcodescanner D/EGL_emulation: eglMakeCurrent: 0xa08052a0: ver 2 0 (tinfo 0xa0803340)
2020-03-13 10:54:52.959 20894-20894/com.example.Barcodescanner D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
2020-03-13 10:54:52.959 20894-20894/com.example.Barcodescanner E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.Barcodescanner, PID: 20894
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.Barcodescannerwith.Main2Activity.handleResult(Main2Activity.java:37)
        at me.dm7.barcodescanner.zxing.ZXingScannerView$1.run(ZXingScannerView.java:164)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

正常扫描二维码后停止运行,提示如下:

Barcodescanner 再次停止打开应用程序

【问题讨论】:

  • 您的错误消息是 MyFragment.textViewQr 未找到,因此您无法在不可用的情况下调用 .setText()。我认为您不能直接使用MyFragment.textViewQr,因为它不是静态类。
  • 我可以使用什么?我是新手,能指导一下吗?

标签: android fragment barcode-scanner


【解决方案1】:
MyFragment.textViewQr.setText(rawResult.getText());

为 Null,因为在片段中您正在初始化另一个 TextView。

这个:-

final TextView textViewQr = (TextView) view.findViewById( R.id.textViewQr );

【讨论】:

  • 现在该怎么办?有什么办法吗? final TextView textViewQr = (TextView) view.findViewById( R.id.textViewQr );这个去掉了,还是错了。
  • 我终于解决了这个问题。 Main2Activity.java 中没有任何变化。在 MyFragment.java 中:Final TextView textViewQr = (TextView) view.findViewById (R.id.textViewQr); intotextViewQr = view.findViewById (R.id.textViewQr); > 这样问题就解决了。非常感谢您的关心和支持!
最近更新 更多