Как добавить элементы в мой ArrayList один за другим? - PullRequest
0 голосов
/ 06 ноября 2018

В основном у меня есть этот код, который должен делать это: каждый раз, когда я вызываю getAddedInvoices, он добавляет новый элемент в список, но моя проблема в том, что я новичок в ArrayList, поэтому я не уверен, как работает, и он продолжает добавлять элементы как друг на друга, а не один за другим, это код:

List<InvoiceData> data = new ArrayList<InvoiceData>();

public List<InvoiceData> getAddedInvoices() {
    int f=0;
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    String jsonString = ReadingURL("http://pos.avancari.co.cr/app/buscar.productos.php");
    try{
        JSONArray jsonItems = new JSONArray(jsonString);
        for(int i =0; i<jsonItems.length();i++){
            if(jsonItems.getJSONObject(i).getString("itemCode").equals(addedcode)){
                InvoiceData row = new InvoiceData();
                row.id = addedcant;
                row.invoiceNumber = i;
                row.productName = jsonItems.getJSONObject(i).getString("itemDesc");
                row.productCode = jsonItems.getJSONObject(i).getString("itemCode");
                row.precio = jsonItems.getJSONObject(i).getString("itemPrice");
                data.add(row);
                f++;
            }
            else{
                System.out.println("No entra a condicional con: "+addedcode);
            }
        }
        return data;
    }catch (Exception e){
        e.printStackTrace();
        return null;
    }
}

Это была функция, а потом я просто назвал ее так:

Invoices invoices = new Invoices();
List<InvoiceData> data = invoices.getAddedInvoices();

Он добавляет выбранные элементы правильно, но не знаю, почему он просто содержит один элемент и просто заменяет его новым, а не продолжает добавлять их. Заранее спасибо

* Редактировать: Проблема в том, что в «если», даже если он идет 5 пять раз, не обнаруживает, что это другое добавление, очевидно, потому что я добавил еще один data.add и на этот раз я получил размер: 2 (который у меня не было раньше, он просто сказал 1)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Ваша проблема, если я понимаю, что вы хотите, заключается в том, что вы перезаписываете свои данные каждый раз, когда вызываете свой метод. Поскольку Java-методы передают не примитивные объекты по ссылке, вы можете сделать это следующим образом:

//In your target class or as a field
List<InvoiceData> data = new ArrayList<InvoiceData>();

// That's another method
public void addInvoices(ArrayList<InvoiceData> pData) {
    int f=0;
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    String jsonString = 
        ReadingURL("http://pos.avancari.co.cr/app/buscar.productos.php");
    try{
        JSONArray jsonItems = new JSONArray(jsonString);
        for(int i =0; i<jsonItems.length();i++){
            if(jsonItems.getJSONObject(i).getString("itemCode").equals(addedcode)){
                InvoiceData row = new InvoiceData();
                row.id = addedcant;
                row.invoiceNumber = i;
                row.productName = jsonItems.getJSONObject(i).getString("itemDesc");
                row.productCode = jsonItems.getJSONObject(i).getString("itemCode");
                row.precio = jsonItems.getJSONObject(i).getString("itemPrice");
                pData.add(row);
                f++;
            }
            else{
                System.out.println("No entra a condicional con: "+addedcode);
            }
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

Тогда назовите это так:

invoices.addInvoices(data);
0 голосов
/ 06 ноября 2018

Вот мое предложение, сделайте getAddedInvoices типом возврата void, не возвращайте данные как уже глобальные.

В этой строке вы переназначаете, что может быть проблемой. Данные списка = invoices.getAddedInvoices ();

Поскольку «данные» уже глобальны, просто используйте их после вызова invoices.getAddedInvoices () вместо того, чтобы снова получить возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...