Java 当设备方向更改时,Qr扫描应用程序正在崩溃
我用android做了一个基本的二维码扫描器,但在扫描二维码时将设备旋转到横向模式,然后再次旋转到纵向模式后,它崩溃了。 还请简要说明问题的原因。我需要释放一些资源吗。我是个初学者Java 当设备方向更改时,Qr扫描应用程序正在崩溃,java,android,Java,Android,我用android做了一个基本的二维码扫描器,但在扫描二维码时将设备旋转到横向模式,然后再次旋转到纵向模式后,它崩溃了。 还请简要说明问题的原因。我需要释放一些资源吗。我是个初学者 package com.example.android.qrking; import android.app.Activity; import android.support.v7.app.AlertDialog; import android.os.Bundle; import android.util.Log;
package com.example.android.qrking;
import android.app.Activity;
import android.support.v7.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
public class MainActivity extends Activity implements ZXingScannerView.ResultHandler{
private ZXingScannerView mScannerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View v){
mScannerView = new ZXingScannerView(this);
setContentView(mScannerView);
mScannerView.setResultHandler(this);
mScannerView.startCamera();
}
@Override
protected void onPause() {
super.onPause();
mScannerView.stopCamera();
}
@Override
public void handleResult(Result result){
Log.v("handler result", result.getText());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("scan results");
builder.setMessage(result.getText());
AlertDialog alertDialog = builder.create();
alertDialog.show();
//uncomment to scan again
mScannerView.resumeCameraPreview(this);
}
}
Logcat详细信息
03-09 21:18:24.460 10365-10365/com.example.android.qrking W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419bac98)
03-09 21:18:24.461 10365-10365/com.example.android.qrking W/dalvikvm: threadid=1: uncaught exception occurred
03-09 21:18:24.461 10365-10365/com.example.android.qrking W/System.err: java.lang.RuntimeException: Unable to pause activity {com.example.android.qrking/com.example.android.qrking.MainActivity}: java.lang.NullPointerException
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3242)
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3193)
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3899)
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.access$900(ActivityThread.java:151)
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
03-09 21:18:24.464 10365-10365/com.example.android.qrking W/System.err: at android.os.Handler.dispatchMessage(Handler.java:110)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at android.os.Looper.loop(Looper.java:193)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5292)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: at dalvik.system.NativeStart.main(Native Method)
03-09 21:18:24.465 10365-10365/com.example.android.qrking W/System.err: Caused by: java.lang.NullPointerException
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/System.err: at com.example.android.qrking.MainActivity.onPause(MainActivity.java:29)
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/System.err: at android.app.Activity.performPause(Activity.java:5368)
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/System.err: at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1239)
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/System.err: at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3224)
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/System.err: ... 12 more
03-09 21:18:24.466 10365-10365/com.example.android.qrking W/dalvikvm: threadid=1: calling UncaughtExceptionHandler
03-09 21:18:24.469 10365-10365/com.example.android.qrking E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.qrking, PID: 10365
java.lang.RuntimeException: Unable to pause activity {com.example.android.qrking/com.example.android.qrking.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3242)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3193)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3899)
at android.app.ActivityThread.access$900(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
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:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.android.qrking.MainActivity.onPause(MainActivity.java:29)
at android.app.Activity.performPause(Activity.java:5368)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1239)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3224)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3193)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3899)
at android.app.ActivityThread.access$900(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
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:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
03-09 21:18:30.246 10365-10365/com.example.android.qrking I/Process: Sending signal. PID: 10365 SIG: 9
默认情况下,更改方向时,您的活动将重新启动,这可能导致崩溃 将其添加到manifest.xml文件中:
android:configChanges="keyboardHidden|orientation|screenSize"
要停止活动,请每次重新启动 最初屏幕处于
纵向模式
步骤1:单击按钮,初始化mScannerView
对象
步骤2:根据您已覆盖的水平旋转手机
onPause()
,这样摄像头将停止
使用停止摄像头()
和您的肖像
活动将被销毁,现在您新创建的水平活动
将具有mScannerView
为null
步骤3:再次将设备旋转至纵向模式
现在,您的水平
活动再次进入暂停
状态,并且mScannerView
对象为null
因此mScannerView.stopCamera()
将导致调用null
对象上的函数的异常,从而导致崩溃
因此,解决方案在onCreate
中初始化您的视图,因为onCreate
将在重新创建活动后执行
解决方案:移动mScannerView=new ZXingScannerView(此)
insideonCreate
发布应用程序崩溃时打印的Logcat错误这是Logcat错误:-movemScannerView=new ZXingScannerView(此)代码>内部onCreate
放置mScannerView=new ZXingScannerView(此);内部onCreate解决了崩溃问题。先生,你能解释一下它是怎么工作的吗?谢谢@PavneetSinghadding android:configChanges=“keyboardHidden | orientation | screenSize”以显示可防止应用程序崩溃,但每次旋转设备时窗口大小都会减小。