我如何一个接一个地将元素添加到ArrayList中?

时间:2018-11-06 15:05:20

标签: java android android-studio

基本上我有以下代码应该执行此操作:每次我调用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();

它正确地添加了选定的元素,但也知道为什么它只保留一个元素并只用新的元素替换而不是继续添加它们。 在此先感谢

* Edit:问题是即使在“ if”中,即使它经过5次五次,也无法检测到它显然是另一个添加,因为我添加了另一个data.add,这次我得到的大小为2(其中我以前没有,它只是说1)

2 个答案:

答案 0 :(得分:0)

这是我的建议,请将getAddedInvoices设置为void返回类型,不要将数据返回为已经全局的数据。

在此行中,您正在重新分配,这可能是一个问题。 列出数据= invoices.getAddedInvoices();

由于“数据”已经是全局数据,因此仅在调用invoices.getAddedInvoices()之后使用它,而不是再次获取返回值。

答案 1 :(得分:0)

如果我了解您想要的内容,那么您的问题是,每次调用您的方法时都会覆盖数据。 由于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);