2015-12-09 49 views
1

我正在使用包含具有对象的数组列表的片段的选项卡。我想保存我的ArrayList在SharedPreferences中保存ArrayList <pojo>

list<Model_BarcodeDetail> 

的onStop()即,我想我的存储列表出现在我目前的标签,当我浏览到另一个选项卡。我做了下面的代码,但是当我试图保存我的列表时,它给了我例外。

@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); 
      } 

     } 
    } 
} 

,我发现了以下情况例外,当我添加另一个标签:

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) 

编辑:

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类:

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; 
} 
} 
+0

创建一个新类SharedPreference 使用GSON到列表转换成JSON字符串,然后保存。 http://androidopentutorials.com/android-how-to-store-list-of-values-in-sharedpreferences/ –

+0

@VishalRaj感谢这个例子帮助我:) –

+0

其工作只有2个选项卡。在添加第3个选项卡时,tab1数据丢失,添加第4个选项卡时,tab1和tab2数据丢失。这是吗? –

回答

3

您需要存储你的模型类的列表像这样

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

    } 

现在,当你的数据在你的POJO类 将其转换为JSON字符串和商店prefrence这样

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

现在,当你想找回那些数据只是做这样

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

现在访问您列出使用该对象这样

mPojo.getModel_BarcodeList(); 

让我知道,如果你仍然有一个问题

+0

什么是getModel_BarcodeList();在mPojo.getModel_BarcodeList(); ? –

+0

你必须在pojo类中创建get和set方法来设置和获取列表 – Sandy

+0

POJO仅用于此目的 – Sandy

相关问题