【发布时间】:2015-09-03 08:34:44
【问题描述】:
我有一个布局非常简单的安卓应用。一个按钮 (scan_barcode1) 后跟一个编辑文本 (scan_content),另一个按钮 (scan_barcode2) 后跟另一个编辑文本 (scan_content2)。
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scanner"
android:id="@+id/scan_barcode1"
android:layout_below="@+id/spinner7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="25dp"
android:onClick="openScanner1" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/scan_content"
android:layout_below="@+id/scan_barcode1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/serial_number"
android:layout_alignRight="@+id/spinner7"
android:layout_alignEnd="@+id/spinner7" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scanner"
android:id="@+id/scan_barcode2"
android:layout_below="@+id/scan_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="openScanner2" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/scan_content2"
android:layout_below="@+id/scan_barcode2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:hint="@string/serial_number"
android:layout_alignRight="@+id/scan_content"
android:layout_alignEnd="@+id/scan_content" />
我想让我的应用程序做什么:按下按钮后,扫描功能将打开,扫描条形码并将序列号放在其下方的编辑文本中。例如,如果您按scan_barcode1,则序列号将放在scan_content中,如果按scan_barcode2,则序列号将出现在scan_content2中。
我的应用程序做什么:按下按钮后,扫描功能将打开,扫描条码放置在活动中的两个editext中。比如我按scan_barcode1,序列号放在scan_content和scan_content2中。
以下是调用条形码扫描仪的意图的代码。我正在使用 zxing 库,仅供参考。
//This method opens the barcode scanner when scan_barcode1 button is pressed
public void openScanner1 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator (this);
scanIntegrator.initiateScan();
}
//This method opens the bar code scanner when scan_barcode2 is pressed
public void openScanner2 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
}
我将两个editText初始化为contentTxt和contentTxt2
contentTxt = (EditText) findViewById(R.id.scan_content);
contentTxt2 = (EditText) findViewById(R.id.scan_content2);
然后我开始 OnActivityResult 方法,该方法检索编辑文本并应该将其放置在正确的编辑文本中(它没有)
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
//Places barcode in the scan_content editext
if (scanningResult != null) {
String scanContent = scanningResult.getContents();
contentTxt.setText(scanContent);
}
//places bar code in the scan_content2 edittext
if (scanningResult !=null) {
String scanContent = scanningResult.getContents();
contentTxt2.setText(scanContent);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
相反,条形码只是在两个编辑文本中复制。我已经被这个问题困扰了一段时间,我迫切需要一个解决方案。非常感谢任何帮助!
所以我已经更新了我的代码,但现在我完全没有检索条形码,结果我得到 null 并且我的 toast 消息弹出。有谁知道发生了什么?无论我按什么按钮都会发生这种情况。
private int scanFieldPosition = 0;
public void openScanner1 (View view) {
scanFieldPosition = 1;
IntentIntegrator scanIntegrator = new IntentIntegrator (this);
scanIntegrator.initiateScan();
}
public void openScanner2 (View view) {
scanFieldPosition = 2;
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanningResult != null && scanFieldPosition == 1) {
String scanContent = scanningResult.getContents();
contentTxt.setText(scanContent);
}
if (scanningResult !=null && scanFieldPosition == 2) {
String scanContent = scanningResult.getContents();
contentTxt2.setText(scanContent);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
问题是我没有静态变量。我仍然收到 toast 消息,但我的条形码位于正确的编辑文本中,这很奇怪。无论如何,感谢您的帮助,我的应用现在可以运行了!
private static int scanFieldPosition = 0;
【问题讨论】:
标签: java android android-intent barcode-scanner onactivityresult