Intent.putExtra передает пустое значение

Я пытаюсь разработать сканер 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 список с пустым значением отображается как []. Есть ли другой способ передачи данных, или мне что-то здесь не хватает?

Вы пытались создать условие, прежде чем получить значение массива из намерения? Intent.hasExtra (имя строки).

Robert Banyai 25.03.2018 09:19

@RobertBanyai Я пробовал. Проблема не в передаче данных. он добавляет пустое значение «[]» в список, если он ничего не сканировал.

sanjeev 25.03.2018 09:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать 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 как [] в список, если сканер ничего не просканировал.

sanjeev 25.03.2018 09:30

Это возможное поведение. Если сканер ничего не просканировал, то список будет пустым и будет считаться пустым. Какой здесь смысл?

ADM 25.03.2018 09:32

Дело в том, что когда я регистрирую его в списке, значение [] добавляется в список.

sanjeev 25.03.2018 09:35

О, спасибо, он справился с проблемой пустой строки. Но предупреждение все еще существует. Пожалуйста, обратитесь к вопросу.

sanjeev 25.03.2018 09:43

Ок, как заявить completeList? он должен быть как ArrayList<String> completeList.

ADM 25.03.2018 09:48

Также вам следует использовать completeList.addAll(listOfBarcodes);.

ADM 25.03.2018 09:56

Другие вопросы по теме