質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

1605閲覧

Android Stadio - ZXing ライブラリ実装時の Exception について

haseg

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/03/25 08:24

Android Stadio - ZXing ライブラリ実装時の Exception について

Android Studio にて、ZXingライブラリを実装しています。
ZXingライブラリによる解析処理実行時、reader.decode() 関数内にて NullPointerException が発生します。

本来、技術者が発生要因を解析すべきところですが、時間がありません。

もし何か実装方法の問題点などについて、わかる人がいらっしゃいましたら、
回答の程、よろしくお願いします。

public class SurfaceViewCallback extends ViewGroup implements SurfaceHolder.Callback { private final String TAG = "BarCodeReader"; private Activity mActivity; SurfaceView mSurfaceView; SurfaceHolder mHolder; Size mPreviewSize; List<Size> mCameraDevPreviewSizeList; Camera mCamera; SurfaceViewCallback(Context context) { super(context); mActivity = (Activity) context; mSurfaceView = new SurfaceView(context); addView(mSurfaceView); mSurfaceView.setOnClickListener(mOnClickListener); mHolder = mSurfaceView.getHolder(); mHolder.addCallback(this); } public void surfaceCreated(SurfaceHolder holder) { try { if (mCamera != null) { mCamera.setPreviewDisplay(holder); } } catch (IOException exception) { Log.e(TAG, "IOException occurance by setPreviewDisplay()", exception); } } public void surfaceDestroyed(SurfaceHolder holder) { if (mCamera != null) { mCamera.stopPreview(); } } public void surfaceChanged(SurfaceHolder holder, int format, int with, int height) { Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); requestLayout(); mCamera.setParameters(parameters); mCamera.startPreview(); } // メンバー変数設定、カメラサイズList取得 public void setCamera(Camera camera) { mCamera = camera; if (mCamera != null) { mCameraDevPreviewSizeList = mCamera.getParameters().getSupportedPreviewSizes(); requestLayout(); } } @Override // 計測開始 // カメラサイズListの中から、比較的表示領域に近いサイズを保持 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); final int height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec); // 表示領域を保持 setMeasuredDimension(width, height); if (mCameraDevPreviewSizeList != null) { // カメラ最適表示サイズ取得 mPreviewSize = getOptimalPreviewSize(mCameraDevPreviewSizeList, width, height); } } @Override // 表示開始 protected void onLayout(boolean changed, int left, int top, int right, int buttom) { if (changed && getChildCount() > 0) { final View child = getChildAt(0); final int width = right - left; final int height = buttom - top; // Preview 表示 child.layout( 0, 0, width, height); } } View.OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { mCamera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { camera.autoFocus( null ); try { if (success) { camera.setOneShotPreviewCallback(mPreviewCallback); } } catch (InterruptedException e) { e.printStackTrace(); } } }); } }; Camera.PreviewCallback mPreviewCallback = new PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { TextView mTextView = (TextView) mActivity.findViewById(R.id.result); int previewWidth = camera.getParameters().getPreviewSize().width; int previewHeight = camera.getParameters().getPreviewSize().height; PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource( data, previewWidth, previewHeight, 0, 0, previewWidth,previewHeight, false); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); Result result = null; try { result = reader.decode(bitmap); String text = result.getText(); mTextView.setText(text); } catch (Exception e) { mTextView.setText("reading..."); } } }; }
03-25 17:01:51.920 16670-16670/com.alpine.barcodereader I/System.out: debugger has settled (1455) 03-25 17:01:52.267 16670-16670/com.alpine.barcodereader I/ContextImpl: com.amazon.client.metrics.api registered service at i = 71 03-25 17:01:52.274 16670-16670/com.alpine.barcodereader D/ProfileManager: Create ProfileManager instance 03-25 17:01:52.281 16670-16670/com.alpine.barcodereader I/InstantRun: starting instant run server: is main process 03-25 17:01:52.459 16670-16670/com.alpine.barcodereader I/FrameworkJumpTable: Successfully loaded all classes 03-25 17:01:52.515 16670-16670/com.alpine.barcodereader I/FrameworkJumpTable: Successfully loaded all methods 03-25 17:01:52.517 16670-16670/com.alpine.barcodereader I/FrameworkJumpTable: Successfully loaded all fields 03-25 17:01:53.259 16670-16813/com.alpine.barcodereader D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 03-25 17:01:53.278 16670-16670/com.alpine.barcodereader I/HAL: loaded HAL id=hwcomposer path=/system/lib/hw/hwcomposer.mt8135.so hmi=0x0 handle=0xaaafad24 03-25 17:01:53.282 16670-16670/com.alpine.barcodereader I/HAL: loaded HAL id=gralloc path=/vendor/lib/hw/gralloc.mt8135.so hmi=0xb6dd63fd handle=0xaaafabd4 03-25 17:01:53.288 16670-16670/com.alpine.barcodereader D/Atlas: Validating map... 03-25 17:01:53.356 16670-16813/com.alpine.barcodereader I/HAL: loaded HAL id=gralloc path=/vendor/lib/hw/gralloc.mt8135.so hmi=0x0 handle=0xaaafabd4 03-25 17:01:53.390 16670-16813/com.alpine.barcodereader I/OpenGLRenderer: Initialized EGL, version 1.4 03-25 17:01:53.391 16670-16813/com.alpine.barcodereader W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 03-25 17:01:53.399 16670-16813/com.alpine.barcodereader D/OpenGLRenderer: Enabling debug mode 0 03-25 17:01:53.400 16670-16813/com.alpine.barcodereader I/HAL: loaded HAL id=gralloc path=/vendor/lib/hw/gralloc.mt8135.so hmi=0xb6dd63fd handle=0xaaafabd4 03-25 17:01:53.924 16670-16670/com.alpine.barcodereader I/Choreographer: Skipped 35 frames! The application may be doing too much work on its main thread. 03-25 17:02:10.252 16670-16685/com.alpine.barcodereader I/art: Background sticky concurrent mark sweep GC freed 15827(891KB) AllocSpace objects, 1(13KB) LOS objects, 12% free, 4MB/4MB, paused 1.205ms total 100.064ms 03-25 17:02:11.469 16670-16670/com.alpine.barcodereader D/AndroidRuntime: Shutting down VM 03-25 17:02:11.486 16670-16670/com.alpine.barcodereader E/AndroidRuntime: FATAL EXCEPTION: main Process: com.alpine.barcodereader, PID: 16670 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.alpine.barcodereader.SurfaceViewCallback$2.onPreviewFrame(SurfaceViewCallback.java:249) at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1133) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5491) 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:984) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
ZXing Version: 'com.google.zxing:core:3.2.1' SDK Version: Android 4.4 実機:Kindle Filerなど複数

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

java

1 Camera.PreviewCallback mPreviewCallback = new PreviewCallback() { 2 3 @Override 4 public void onPreviewFrame(byte[] data, Camera camera) { 5 TextView mTextView = (TextView) mActivity.findViewById(R.id.result);

まずデバッグ実行によって上記の処理でmTextViewに代入している行にブレークポイントを設定し、入る値を確認することでしょう。多分、nullが入っているのではないでしょうか。そうであるとしても、なぜnullが入るのかは提示されたコードの範囲からはわかりません。R.id.resultで指定されるTextViewがまだ画面に描画されていない段階でこのコードが呼ばれる流れになっていると、nullが返ることになるでしょう。そういう構造になっていないか、確認する必要があると思います。

投稿2018/03/25 09:38

編集2018/03/25 12:56
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問