Я пытаюсь разработать сканер qr, в котором я хочу показать пользователю историю результатов сканирования. Теперь, хотя значения отсканированных данных передаются в другое действие должным образом; проблема в том, что даже если я не сканировал qr, пустые данные передаются в список следующего действия.
Мой вопрос: как мне убедиться, что только при сканировании qr данные передаются следующему действию в списке?
Это код моей активности со штрих-кодом.
public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
//Initialization
private static final int REQUEST_CAMERA = 1;
private ZXingScannerView mScannerView;
ArrayList<String> listOfBarcodes = new ArrayList<String>();
//This is the part where I handle the result
@Override
public void handleResult(Result rawResult) {
final String result = rawResult.getText();
if (!result.isEmpty()) {
//whenever you capture a new barcode add it to this list
listOfBarcodes.add(result);
}
P.S: После этого обрабатываю результат для отображения в AlertDialog.
Часть, в которой я отправляю данные следующему действию.
Intent data = new Intent( getApplicationContext(), History.class );
if (listOfBarcodes!=null) {
data.putExtra("Barcode", listOfBarcodes);
}
startActivity( data );
History.java
public class History extends AppCompatActivity {
public static final ArrayList completeList = new ArrayList<String>();
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
textView = findViewById(R.id.text_view);
Intent callingIntent= getIntent();
ArrayList<String> listOfBarcodes = callingIntent.getExtras().getStringArrayList("Barcode");
completeList.add(listOfBarcodes);
ArrayAdapter<String> aA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList);
ListView lv = (ListView) findViewById(R.id.my_list_id);
lv.setAdapter(aA);
Кроме того, я также получаю предупреждение в completeList.add(listOfBarcodes);.
Unchecked call to 'add(E)' as a member of raw type 'java.util.ArrayList' less... (Ctrl+F1) Signals places where an unchecked warning is issued by the compiler, for example:
void f(HashMap map) { map.put("key", "value"); }
В History.java список с пустым значением отображается как []. Есть ли другой способ передачи данных, или мне что-то здесь не хватает?
@RobertBanyai Я пробовал. Проблема не в передаче данных. он добавляет пустое значение «[]» в список, если он ничего не сканировал.




Вы должны использовать putStringArrayListExtra() при отправке ArrayList<String>. Сначала убедитесь, что в списке listOfBarcodes есть данные.
Intent data = new Intent( getApplicationContext(), History.class );
if (listOfBarcodes.size()!=0)
data.putStringArrayListExtra("Barcode",listOfBarcodes);
startActivity(data);
В исторической деятельности: -
ListView lv = (ListView) findViewById(R.id.my_list_id);
Intent callingIntent= getIntent();
if (callingIntent.hasExtra("Barcode")) {
ArrayList<String> listOfBarcodes = callingIntent.getStringArrayListExtra("Barcode");
completeList.addAll(listOfBarcodes);
ArrayAdapter<String> aA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList);
lv.setAdapter(aA);
}else{
// No scanned handle here
}
Спасибо за предложение. Пробовал. Однако данные, как я сказал в вопросе, передаются. Тем не менее, проблема в том, что он каждый раз отправляет пустой StringArray как [] в список, если сканер ничего не просканировал.
Это возможное поведение. Если сканер ничего не просканировал, то список будет пустым и будет считаться пустым. Какой здесь смысл?
Дело в том, что когда я регистрирую его в списке, значение [] добавляется в список.
О, спасибо, он справился с проблемой пустой строки. Но предупреждение все еще существует. Пожалуйста, обратитесь к вопросу.
Ок, как заявить completeList? он должен быть как ArrayList<String> completeList.
Также вам следует использовать completeList.addAll(listOfBarcodes);.
Вы пытались создать условие, прежде чем получить значение массива из намерения? Intent.hasExtra (имя строки).