2012-07-18 157 views
0

我想通過使用他們的ScannerViaIntent源代碼通過zxing從純文本條形碼中提取數據。當我爲單個ImageButton設置代碼時,它工作得很好,但是當我設置其他兩個按鈕時,從Barcode Scanner返回結果時收到此錯誤。將OnClickListener與多個ImageButton一起使用?

錯誤:

07-18 14:16:00.080: E/AndroidRuntime(9004): java.lang.RuntimeException: Unable to resume activity {com.fmi.inventory/com.fmi.inventory.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=49374, result=0, data=null} to activity {com.fmi.inventory/com.fmi.inventory.MainActivity}: java.lang.NullPointerException 
07-18 14:16:00.080: E/AndroidRuntime(9004): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=49374, result=0, data=null} to activity {com.fmi.inventory/com.fmi.inventory.MainActivity}: java.lang.NullPointerException 
07-18 14:16:00.080: E/AndroidRuntime(9004):  at com.fmi.inventory.MainActivity.onActivityResult(MainActivity.java:70) 

代碼:

package com.fmi.inventory; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ImageButton; 

public class MainActivity extends Activity { 

    ImageButton button; 
    ImageButton button1; 
    ImageButton button2; 
    EditText editField; 
    Activity activity; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     activity = this; 
     button = (ImageButton)findViewById(R.id.scanCubeID); 
     button1 = (ImageButton)findViewById(R.id.scanEmployeeID); 
     button2 = (ImageButton)findViewById(R.id.scanConfigID); 
     button.setOnClickListener(listener); 
     button1.setOnClickListener(listener); 
     button2.setOnClickListener(listener); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 


    } 
    private View.OnClickListener listener = new View.OnClickListener() { 
     public void onClick(View v) { 
      IntentIntegrator integrator = new IntentIntegrator(activity); 
      switch (v.getId()){ 
       case (R.id.scanCubeID): 
        editField = (EditText)findViewById(R.id.editCubeID); 
        integrator.initiateScan(); 
       case (R.id.scanEmployeeID): 
        editField = (EditText)findViewById(R.id.editEmployeeID); 
        integrator.initiateScan(); 
       case (R.id.scanConfigID): 
        editField = (EditText)findViewById(R.id.editConfigID); 
        integrator.initiateScan(); 
      } 


     } 
    }; 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
      IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
      if (scanResult != null) { 
       String barcode = scanResult.getContents(); 
       this.editField.setText(barcode); 
      } 
      // else continue with any other code you need in the method 

     } 
} 

佈局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <EditText 
     android:id="@+id/editCubeID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/scanEmployeeID" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/scanCubeID" 
     android:ems="10" 
     android:hint="@string/edit_cubeid" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editEmployeeID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/scanConfigID" 
     android:layout_alignParentLeft="true" 
     android:layout_alignRight="@+id/editCubeID" 
     android:layout_below="@+id/editCubeID" 
     android:ems="10" 
     android:hint="@string/edit_employeeid" /> 

    <EditText 
     android:id="@+id/editConfigID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/scanConfigID" 
     android:layout_alignParentLeft="true" 
     android:layout_alignRight="@+id/editEmployeeID" 
     android:layout_below="@+id/editEmployeeID" 
     android:ems="10" 
     android:hint="@string/edit_configid" /> 

    <ImageButton 
     android:id="@+id/scanCubeID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:contentDescription="@string/desc" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/ic_action_scan"/> 

    <ImageButton 
     android:id="@+id/scanEmployeeID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:contentDescription="@string/desc" 
     android:layout_below="@+id/scanCubeID" 
     android:src="@drawable/ic_action_scan"/> 

    <ImageButton 
     android:id="@+id/scanConfigID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:contentDescription="@string/desc" 
     android:layout_below="@+id/scanEmployeeID" 
     android:src="@drawable/ic_action_scan"/> 

    <Button 
     android:id="@+id/submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editConfigID" 
     android:text="@string/button_continue" /> 

</RelativeLayout> 
+0

您是否已經清理了幾次該項目以查看問題是否已解決? – Pyrodante 2012-07-18 18:21:09

+0

什麼是您的MainActivity.java文件中行號:: 70的代碼。在那一行你會得到NullPointerException。 – 2012-07-18 18:32:03

+0

[連接到條碼應用程序中的多個按鈕的監聽器中的異常]的可能重複(http://stackoverflow.com/questions/11544674/exception-in-listener-attached-to-multiple-buttons-in-barcode-app) – 2012-07-19 03:13:12

回答

3

在開關添加break的案件:

public void onClick(View v) { 
      IntentIntegrator integrator = new IntentIntegrator(activity); 
      switch (v.getId()){ 
       case (R.id.scanCubeID): 
        editField = (EditText)findViewById(R.id.editCubeID); 
        integrator.initiateScan(); 

       break ; // add here 

       case (R.id.scanEmployeeID): 
        editField = (EditText)findViewById(R.id.editEmployeeID); 
        integrator.initiateScan(); 

       break ;// add here 

       case (R.id.scanConfigID): 
        editField = (EditText)findViewById(R.id.editConfigID); 
        integrator.initiateScan(); 

       break ; // add here 

      } 


     } 
    }; 
+1

+1不錯的選擇... – 2012-07-18 18:24:34

+1

除了我不確定這會與'onActivityResult(...)'中的NPE有什麼關係' – Squonk 2012-07-18 18:27:10

+1

雖然break很重要,但我認爲這是破壞他的代碼的其他內容。他得到「this.edittext」的空指針 – Rasmus 2012-07-18 18:27:23

相關問題