Sheena Tyagi
Sheena Tyagi

Reputation: 71

Save ArrayList<pojo> in SharedPreferences

I am using tabs which consist of fragment that has an arraylist of objects. I want to store my arraylist

list<Model_BarcodeDetail>

onStop() ie., I want to store my list that is present in my current tab when I navigate to another tab. I did the following code but it is giving me exception when I'm trying to save my list.

@Override
public void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    System.out.println("=====pause");
    saveDatas();
}

public void saveDatas() {

    Log.d("msg", "Save Instance");
    SharedPreferences.Editor outState = getActivity().getSharedPreferences(
            "order", Context.MODE_APPEND).edit();

    text = editText_barcode.getText().toString();
    itemQuantity = editText_quantity.getText().toString();

    outState.putString("saved", "true");

    outState.putString("text", text);
    outState.putString("title", job_name);
    outState.putString("area", selected_area);
    outState.putString("location", selected_loc);
    outState.putString("quantity", itemQuantity);
    //String strObject = gson.toJson(list, Model_BarcodeDetail.class);
    //outState.putString("MyList", strObject);
    POJO mPojo = new POJO();
    mPojo.setData(list);
        String strObject = gson.toJson(mPojo, POJO.class);
        outState.putString("MyList", strObject);

    outState.commit();
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    Bundle extras = getArguments();

    /***** PUT DATA IN EDITTEXT if ITS AVAILABLE IN BUNDLE *****/
    System.out.println("===jobname:"+job_name);
    SharedPreferences orderData = getActivity().getSharedPreferences(
            "order", Context.MODE_APPEND);
    if (orderData != null) {
        String a = orderData.getString("saved", "");
        if (a != null && a.equalsIgnoreCase("true")) {
            text = orderData.getString("text", "");
            System.out.println("====tetx:" + text);
            String title = orderData.getString("title", "");
            System.out.println("===title: "+title+"===jobname: "+job_name);
            if (title.equalsIgnoreCase(job_name)) {
                editText_barcode.setText(text);
                selected_area = orderData.getString("area", "");
                selected_loc = orderData.getString("location", "");
                itemQuantity = orderData.getString("quantity", "");
                editText_quantity.setText(itemQuantity);
                String json = orderData.getString("MyList", "");
                List<Model_BarcodeDetail> list = gson.fromJson(json,   
 listOfObjects);
            }

        }
    }
}

I'm getting the following exception when I add another tab:

12-09 12:08:28.072: E/AndroidRuntime(28616): FATAL EXCEPTION: main
12-09 12:08:28.072: E/AndroidRuntime(28616): Process: com.example.pdt, PID:   
28616
12-09 12:08:28.072: E/AndroidRuntime(28616): java.lang.NullPointerException
12-09 12:08:28.072: E/AndroidRuntime(28616):    at   
com.example.pdt.Fragment_Main.saveDatas(Fragment_Main.java:446)
12-09 12:08:28.072: E/AndroidRuntime(28616):    at 
com.example.pdt.Fragment_Main.onPause(Fragment_Main.java:426)
12-09 12:08:28.072: E/AndroidRuntime(28616):    at 
android.support.v4.app.Fragment.performPause(Fragment.java:1950)
12-09 12:08:28.072: E/AndroidRuntime(28616):    at 
   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1005)
12-09 12:08:28.072: E/AndroidRuntime(28616):    at 
android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1235)

EDIT:

Model_BarcodeDetail class: 

package com.example.model;

public class Model_BarcodeDetail {

public String datetime, success, name, reference, description, price,
        color, size, stock, branch, supplier, location, basesell, vat,
        avg_cost, last_cost, next_cost, group_code, type, remarks1,
        remarks2, listed_days, title, meta_keywords, meta_description,
        job_id, total, fixedTotal, fixedPrice, aliascode, draftName,    
itemBarcode, totalDiscount;
boolean priceEdited;

public boolean isPriceEdited() {
    return priceEdited;
}

public void setPriceEdited(boolean priceEdited) {
    this.priceEdited = priceEdited;
}

private String string_sale_return;

public String barcode, quantity = "0", area, batch;

private boolean scanned, isEdited;

public String getTotalDiscount() {
    return totalDiscount;
}

public void setTotalDiscount(String totalDiscount) {
    this.totalDiscount = totalDiscount;
}

public String getItemBarcode() {
    return itemBarcode;
}

public void setItemBarcode(String itemBarcode) {
    this.itemBarcode = itemBarcode;
}



public String getDraftName() {
    return draftName;
}

public void setDraftName(String draftName) {
    this.draftName = draftName;
}

public String getAliascode() {
    return aliascode;
}

public void setAliascode(String aliascode) {
    this.aliascode = aliascode;
}

public String getString_sale_return() {
    return string_sale_return;
}

public void setString_sale_return(String string_sale_return) {
    this.string_sale_return = string_sale_return;
}

public boolean isScanned() {
    return scanned;
}

public void setScanned(boolean scanned) {
    this.scanned = scanned;
}

public String getJob_id() {
    return job_id;
}

public void setJob_id(String job_id) {
    this.job_id = job_id;
}

public String getBatch() {
    return batch;
}

public void setBatch(String batch) {
    this.batch = batch;
}

public String getBarcode() {
    return barcode;
}

public void setBarcode(String barcode) {
    this.barcode = barcode;
}

public String getQuantity() {
    return quantity;
}

public void setQuantity(String quantity) {
    this.quantity = quantity;
}

public String getArea() {
    return area;
}

public void setArea(String area) {
    this.area = area;
}

public String getDatetime() {
    return datetime;
}

public void setDatetime(String datetime) {
    this.datetime = datetime;
}

public String getSuccess() {
    return success;
}

public void setSuccess(String success) {
    this.success = success;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getReference() {
    return reference;
}

public void setReference(String reference) {
    this.reference = reference;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

public String getColor() {
    return color;
}

public void setColor(String color) {
    this.color = color;
}

public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

public String getStock() {
    return stock;
}

public void setStock(String stock) {
    this.stock = stock;
}

public String getBranch() {
    return branch;
}

public void setBranch(String branch) {
    this.branch = branch;
}

public String getSupplier() {
    return supplier;
}

public void setSupplier(String supplier) {
    this.supplier = supplier;
}

public String getLocation() {
    return location;
}

public void setLocation(String location) {
    this.location = location;
}

public String getBasesell() {
    return basesell;
}

public void setBasesell(String basesell) {
    this.basesell = basesell;
}

public String getVat() {
    return vat;
}

public void setVat(String vat) {
    this.vat = vat;
}

public String getAvg_cost() {
    return avg_cost;
}

public void setAvg_cost(String avg_cost) {
    this.avg_cost = avg_cost;
}

public String getLast_cost() {
    return last_cost;
}

public void setLast_cost(String last_cost) {
    this.last_cost = last_cost;
}

public String getNext_cost() {
    return next_cost;
}

public void setNext_cost(String next_cost) {
    this.next_cost = next_cost;
}

public String getGroup_code() {
    return group_code;
}

public void setGroup_code(String group_code) {
    this.group_code = group_code;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getRemarks1() {
    return remarks1;
}

public void setRemarks1(String remarks1) {
    this.remarks1 = remarks1;
}

public String getRemarks2() {
    return remarks2;
}

public void setRemarks2(String remarks2) {
    this.remarks2 = remarks2;
}

public String getListed_days() {
    return listed_days;
}

public void setListed_days(String listed_days) {
    this.listed_days = listed_days;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getMeta_keywords() {
    return meta_keywords;
}

public void setMeta_keywords(String meta_keywords) {
    this.meta_keywords = meta_keywords;
}

public String getMeta_description() {
    return meta_description;
}

public void setMeta_description(String meta_description) {
    this.meta_description = meta_description;
}

public String getTotal() {
    return total;
}

public void setTotal(String total) {
    this.total = total;
}

public boolean isEdited() {
    return isEdited;
}

public void setEdited(boolean isEdited) {
    this.isEdited = isEdited;
}

public String getFixedTotal() {
    return fixedTotal;
}

public void setFixedTotal(String fixedTotal) {
    this.fixedTotal = fixedTotal;
}

public String getFixedPrice() {
    return fixedPrice;
}

public void setFixedPrice(String fixedPrice) {
    this.fixedPrice = fixedPrice;
}



}

POJO class:

package com.example.model;

import java.util.List;

public class Pojo {
List<Model_BarcodeDetail> data;

public List<Model_BarcodeDetail> getData() {
    return data;
}

public void setData(List<Model_BarcodeDetail> data) {
    this.data = data;
}
}

Upvotes: 2

Views: 1521

Answers (2)

Sandy
Sandy

Reputation: 1005

You need to store your list in the model class like this

  public class POJO {
     List<Model_BarcodeDetail> data;
     public List<Model_BarcodeDetail> getData() {
        return data;
     }
     public void setData(List<Model_BarcodeDetail> data) {
        this.data = data;
     }

  }

now when you have data in your POJO class Convert it to json string and store to prefrence like this

String strObject = gson.toJson(list, POJO.class);
outState.putString("MyList", strObject);

Now when you want to get back those data just do like this

String json = orderData.getString("MyList", "");
POJO mPojo = gson.fromJson(json,POJO.class);

now access you List using this object like this

mPojo.getModel_BarcodeList();

Let me know if you still have an issue

Upvotes: 4

Bhargav Thanki
Bhargav Thanki

Reputation: 4954

You can use TinyDB -- Android-Shared-Preferences-Turbo

Upvotes: 0

Related Questions