Java Android Studio条形码扫描仪应用程序。通过意向扫描
我有一个android应用程序,布局非常简单。一个按钮(扫描条形码1),后跟一个edittext(扫描内容),另一个按钮(扫描条形码2)后跟另一个edittext(扫描内容2) 我将两个editText初始化为contentTxt和contentTxt2Java Android Studio条形码扫描仪应用程序。通过意向扫描,java,android,android-intent,barcode-scanner,onactivityresult,Java,Android,Android Intent,Barcode Scanner,Onactivityresult,我有一个android应用程序,布局非常简单。一个按钮(扫描条形码1),后跟一个edittext(扫描内容),另一个按钮(扫描条形码2)后跟另一个edittext(扫描内容2) 我将两个editText初始化为contentTxt和contentTxt2 contentTxt = (EditText) findViewById(R.id.scan_content); contentTxt2 = (EditText) findViewById(R.id.scan_content2
contentTxt = (EditText) findViewById(R.id.scan_content);
contentTxt2 = (EditText) findViewById(R.id.scan_content2);
然后,我开始使用OnActivityResult方法,该方法检索edittext,并将其放置在正确的edittext中(它没有)
相反,条形码只是在两个文本之间复制。我在这个问题上已经纠结了一段时间,我迫切需要一个解决方案。非常感谢您的帮助
所以我更新了我的代码,但现在我没有检索条形码,结果是空的,我的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();
}
}
问题是我没有静态变量。我仍然收到祝酒词,但我的条形码将其放在正确的编辑文本中,这很奇怪。不管怎样,多亏了你的帮助,我的应用程序现在可以正常工作了
private static int scanFieldPosition = 0;
您可以为此设置一个
static
标志,并在按下按钮1时为其指定1
,在按下按钮2时为其指定2
。然后,您可以在ActivityResult()上的中检查标志。你可以这样做:
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()中
您可以为此设置一个static
标志,并在按下按钮1时为其指定1
,在按下按钮2时为其指定2
。然后,您可以在ActivityResult()上的中检查标志。你可以这样做:
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()中
您可以为此设置一个static
标志,并在按下按钮1时为其指定1
,在按下按钮2时为其指定2
。然后,您可以在ActivityResult()上的中检查标志。你可以这样做:
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()中
您可以为此设置一个static
标志,并在按下按钮1时为其指定1
,在按下按钮2时为其指定2
。然后,您可以在ActivityResult()上的中检查标志。你可以这样做:
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()中
如果scanningResult
不为null(换句话说,如果If
子句的条件为true),则为两个编辑文本设置文本。
创建扫描意图时,您需要保存一些标识要填写的EditText
的信息,并在您的onActivityResult
中检索这些信息,例如:
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();
}
然后检查onActivityResult
中的scanFieldPosition
,知道要填写哪个EditText
。如果scanningResult
不为空(换句话说,如果If
子句的条件为true),则为两个EditText设置文本。
创建扫描意图时,您需要保存一些标识要填写的EditText
的信息,并在您的onActivityResult
中检索这些信息,例如:
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();
}
然后检查onActivityResult
中的scanFieldPosition
,知道要填写哪个EditText
。如果scanningResult
不为空(换句话说,如果If
子句的条件为true),则为两个EditText设置文本。
创建扫描意图时,您需要保存一些标识要填写的EditText
的信息,并在您的onActivityResult
中检索这些信息,例如:
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();
}
然后检查onActivityResult
中的scanFieldPosition
,知道要填写哪个EditText
。如果scanningResult
不为空(换句话说,如果If
子句的条件为true),则为两个EditText设置文本。
创建扫描意图时,您需要保存一些标识要填写的EditText
的信息,并在您的onActivityResult
中检索这些信息,例如:
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();
}
然后检查活动结果中的scanFieldPosition
,以了解要填写的EditText
。您没有在IntentIntegrator中显示扫描意图的构造,但我猜您使用的是相同的请求代码
更改扫描意图的构造,使其具有不同的请求代码(可能通过在上下文之外将值传递给IntentIntegrator),然后在调用onActivityResult时,您将能够检查此项以了解按下了哪个扫描按钮并填充相关的编辑文本
这是requestCode的设计目的,而不是保存可能导致状态问题的变量。您没有在IntentIntegrator中显示扫描意图的构造,但我猜您使用的是相同的requestCode
更改扫描意图的构造,使其具有不同的请求代码(可能通过在上下文之外将值传递给IntentIntegrator),然后在调用onActivityResult时,您将能够检查此项以了解按下了哪个扫描按钮并填充相关的编辑文本
这是requestCode的设计目的,而不是保存可能导致状态问题的变量。您没有在IntentIntegrator中显示扫描意图的构造,但我猜您使用的是相同的requestCode
更改扫描意图的构造,使其具有不同的请求代码(可能通过在上下文之外将值传递给IntentIntegrator),然后在调用onActivityResult时,您将能够检查此项以了解按下了哪个扫描按钮并填充相关的编辑文本
这就是