我有一个 Android 应用程序,它的布局非常简单。一个按钮 (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 中。
我的应用程序的用途:按下按钮后,扫描功能将打开,扫描条形码放置在 Activity 的两个编辑文本中。例如,如果我按 scan_barcode1,则序列号将放置在 scan_content 和 scan_content2 中。
以下是调用条形码扫描仪的 Intent 代码。我正在使用 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;
最佳答案
您可以为此设置一个static
标志,并在按下button1时为其分配1
,并在按下按钮1时为其分配2
按钮 2 被按下。然后您可以检查 onActivityResult()
中的标志。你可以这样做:
public static int editTextNumber = 0;
public void openScanner1 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator (this);
scanIntegrator.initiateScan();
editTextNumber = 1;
}
public void openScanner2 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
editTextNumber = 2;
}
然后在你的onActivityResult()
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
//Places barcode in the scan_content editext
Log.e("editTextNumber",""+ editTextNumber ); // check whats value here
if (scanningResult != null && editTextNumber == 1) { // checking for flag here
String scanContent = scanningResult.getContents();
contentTxt.setText(scanContent);
}
//places bar code in the scan_content2 edittext
else if (scanningResult !=null && editTextNumber == 2) { // checking for flag also
String scanContent = scanningResult.getContents();
contentTxt2.setText(scanContent);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
关于java - Android Studio 条码扫描器应用程序。通过 Intent 扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370758/