2012-07-18 35 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

相关问题