-3

我是 android 开发的初学者。我正在尝试创建一个能够扫描的应用程序QR code。起初我已经完成了一切MainActivity,一切正常,但现在我需要创建一个名为的类QRScanner,然后MainActivity在用户单击按钮扫描某些内容时调用。我尝试了许多找到的解决方案,但是当我单击scan Button.

这就是我所做的。

MainActivity班级:

public class MainActivity extends Activity implements View.OnClickListener {

    public Button Scanner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Scanner =(Button)findViewById(R.id.buttonScanQR);
        Scanner.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        Intent QRScanner = new Intent(this, QRScanner .class);
        startActivity(QRScanner );
        QRScanner QRS =new QRScanner ();
        QRS.scanQR(v);
    }    

}    

我也尝试实现这个方法:

private void startActivityScanner(){
   startActivity( new Intent("pathHere.QRScanner " ));
}

@Override
public void onClick(View v) {
    switch(v.getId()){
    case R.id.buttonScanQR:
        startActivityScanner();
        QRScanner QRScanner1 =new QRScanner ();
        QRScanner1.scanQR(v);

        break;
    }
}

这是 QRScanner 类:

public class QRScanner extends Activity {
/* QR Code Stuff taken from http://examples.javacodegeeks.com/android/android-barcode-and-qr-scanner-example/ */
static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";
public void scanQR(View v) {
    try {
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    } catch (ActivityNotFoundException anfe) {
        showDialog(QRScanner.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
    }
}

private static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) {
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
    downloadDialog.setTitle(title);
    downloadDialog.setMessage(message);
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try {
                act.startActivity(intent);
            } catch (ActivityNotFoundException anfe) {

            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });
    return downloadDialog.show();
}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG);
            toast.show();
        }
    }
}
}

我真的很感激对我可能遗漏的东西的解释。

这是新日志(崩溃错误)

   06-02 16:12:15.005    2380-2395/sn.t.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
06-02 16:12:15.005    2380-2395/sn.t.app W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xb3f1b920, error=EGL_SUCCESS
06-02 16:12:18.825    2380-2380/sn.t.app D/AndroidRuntime﹕ Shutting down VM
    --------- beginning of crash
06-02 16:12:18.826    2380-2380/sn.t.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: sn.t.app, PID: 2380
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
            at android.app.Activity.startActivityForResult(Activity.java:3745)
            at android.app.Activity.startActivityForResult(Activity.java:3706)
            at snet.tuberlin.app.QRCode.scanQR(QRCode.java:22)
            at snet.tuberlin.app.MainActivity.onClick(MainActivity.java:49)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-02 16:12:23.556    2380-2387/sn.t.app W/art﹕ Suspending all threads took: 13.760ms
06-02 16:12:59.072    2380-2387/sn.t.app W/art﹕ Suspending all threads took: 8.775ms
4

1 回答 1

0

如果有帮助,请参阅下面的代码片段

// MainActivity

@Override
public void onClick(View v) {
    Intent QRScanner = new Intent(this, QRScanner.class);
    startActivity(QRScanner);

    // NOT required, as you should never create instance of your Activity with 'new'
    //QRScanner QRS =new QRScanner();
    //QRS.scanQR(v);
}

// QRScanner

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_new_layout);
    // in your_new_layout should have a "Button"  with id "buttonScanQR"
    scanner =(Button)findViewById(R.id.buttonScanQR);
    scanner.setOnClickListener(this); // this will basically invoke your onClick(View v)

    // If you want to hold on to your method signature "scanQR(View v)"
    /*

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            scanQR(v);
        }
    });

    */
}

public void onClick(View v) {
    try {
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    } catch (ActivityNotFoundException anfe) {
        showDialog(QRScanner.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
    }
}
于 2015-06-02T17:58:38.037 回答