2017-04-03 122 views
0

在此代碼中,我正在解析JSON並使用ArrayList將其顯示在可搜索的微調器中。該代碼完美工作,但是當涉及到解析大型JSON時,它需要時間和移動數據上的內存。如何爲此代碼編寫Gson?

任何人都可以告訴我一個更好的想法來解析大JSON或任何人可以解釋我如何解析它與Gson和加載到可搜索的微調?

try { 
     if (response.has("products_data")) { 
      jsonArray = new JSONArray(); 
       jsonArray = response.getJSONArray("products_data"); 
      for (int t = 0; t < jsonArray.length(); t++) { 
       object = jsonArray.getJSONObject(t); 
       retailer_id = object.getString("retailer_id"); 
       retailer_name = object.getString("retailer_name"); 
       product_code = object.getString("product_code"); 
       product_name = object.getString("product_name"); 
       pro_packing = object.getString("pro_packing"); 
       pro_company=object.getString("pro_company"); 
       pro_generic_code=object.getString("pro_generic_code"); 
       pro_generic_name=object.getString("pro_generic_name"); 
       pro_stock = object.getInt("product_stock"); 
       product_MRP=object.getDouble("product_MRP"); 
       p = new Product(); 
       p.setRetailer_id(retailer_id); 
       p.setRetailer_name(retailer_name); 
       p.setProduct_code(product_code); 
       p.setProduct_name(product_name); 
       p.setPro_packing(pro_packing); 
       p.setPro_company(pro_company); 
       p.setPro_generic_code(pro_generic_code); 
       p.setPro_generic_name(pro_generic_name); 
       p.setPro_stock(pro_stock); 
       p.setProduct_MRP(product_MRP); 
       productlist.add(p); 
       } 
       progressDialog.dismiss(); 

     final List<String> pname = new ArrayList<String>(); 
     final List<String> pcode = new ArrayList<String>(); 
     pname.clear(); 
     pname.add(0,"Select Products"); 
     for (int i = 0; i < productlist.size(); i++) { 
             pname.add(productlist.get(i).getProduct_name()); 
           } 
       // Creating adapter for spinner 
     final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.custom_spinnertxt, pname); 

           spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      runOnUiThread(new Runnable() { 
        @Override 
       public void run() { 
         // attaching data adapter to spinner 

    autoCompleteTextView.setAdapter(spinnerAdapter); 
             autoCompleteTextView.setSelection(0); 
            } 
           }); 
            autoCompleteTextView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int i, long id) { 
      if(i>0) { 
     p_id = productlist.get(i - 1).getProduct_code(); 
     p_stock = productlist.get(i - 1).getPro_stock(); 
     ppack = productlist.get(i - 1).getPro_packing(); 
     pcomp = productlist.get(i - 1).getPro_company(); 
     mrp = productlist.get(i - 1).getProduct_MRP(); 
     pseller = productlist.get(i - 1).getRetailer_name(); 
     // Log.i("pID:", p_id); 
     //Log.i("pStock:", String.valueOf(p_stock)); 
     //Log.i("PMRP:", String.valueOf(mrp)); 
             } 
            } 

            @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

            } 
           }); 

          } 

         } 

這是我的JSON響應:

"products_data": [ 
{ 
    "retailer_id": "mum0022", 
    "retailer_name": "SAKTI MEDICO", 
    "product_code": "6474", 
    "product_name": "EPISOFT CLEANSING LOTION", 
    "pro_packing": "125ML", 
    "pro_company": "GLENMARK-GRACEWELLSPECIALITY", 
    "pro_generic_code": "", 
    "pro_generic_name": "", 
    "product_stock": "7", 
    "product_MRP": "209" 
}, 
{ 
    "retailer_id": "mum0022", 
    "retailer_name": "SAKTI MEDICO", 
    "product_code": "8403", 
    "product_name": "ELOVERA LOTION 150ML (BIG)", 
    "pro_packing": "150ML", 
    "pro_company": "GLENMARK (DERMAX)", 
    "pro_generic_code": "", 
    "pro_generic_name": "", 
    "product_stock": "3", 
    "product_MRP": "324.5" 
}, 
... 
+1

發表您的JSON響應以及 –

+0

參考: HTTPS ://inducesmile.com/android/android-json-parsing-using-gson-and-recyclerview/ –

+4

我很想說:這個網站不是免費的寫作服務。但無論如何:您希望我們花時間幫助您解決問題。所以你可以至少很有禮貌地正確格式化/縮進你的所有代碼。沒有必要將代碼推到最右邊,以至於需要使用水平滾動條來查看它! – GhostCat

回答

1

試試這個

public class Products_data implements Parcelable { 
@SerializedName("retailer_id") 
private String retailer_id; 

@SerializedName("retailer_name") 
private String retailer_name; 

@SerializedName("product_code") 
private String product_code; 

@SerializedName("product_name") 
private String product_name; 

@SerializedName("pro_packing") 
private String pro_packing; 

@SerializedName("pro_company") 
private String pro_company; 

@SerializedName("pro_generic_code") 
private String pro_generic_code; 

@SerializedName("pro_generic_name") 
private String pro_generic_name; 

@SerializedName("product_stock") 
private Integer product_stock; 

@SerializedName("product_MRP") 
private Double product_MRP; 


public Products_data() { 
} 

protected Products_data(Parcel in) { 
    retailer_id = in.readString(); 
    retailer_name = in.readString(); 
    product_code = in.readString(); 
    product_name = in.readString(); 
    pro_packing = in.readString(); 
    pro_company = in.readString(); 
    pro_generic_code = in.readString(); 
    pro_generic_name = in.readString(); 
    product_stock = in.readInt(); 
    product_MRP = in.readDouble(); 
} 

public static final Creator<Products_data> CREATOR = new Creator<Products_data>() { 
    @Override 
    public Products_data createFromParcel(Parcel in) { 
     return new Products_data(in); 
    } 

    @Override 
    public Products_data[] newArray(int size) { 
     return new Products_data[size]; 
    } 
}; 

public String getRetailer_id() { 
    return retailer_id; 
} 

public void setRetailer_id(String retailer_id) { 
    this.retailer_id = retailer_id; 
} 

public String getRetailer_name() { 
    return retailer_name; 
} 

public void setRetailer_name(String retailer_name) { 
    this.retailer_name = retailer_name; 
} 

public String getProduct_code() { 
    return product_code; 
} 

public void setProduct_code(String product_code) { 
    this.product_code = product_code; 
} 

public String getProduct_name() { 
    return product_name; 
} 

public void setProduct_name(String product_name) { 
    this.product_name = product_name; 
} 

public String getPro_packing() { 
    return pro_packing; 
} 

public void setPro_packing(String pro_packing) { 
    this.pro_packing = pro_packing; 
} 

public String getPro_company() { 
    return pro_company; 
} 

public void setPro_company(String pro_company) { 
    this.pro_company = pro_company; 
} 

public String getPro_generic_code() { 
    return pro_generic_code; 
} 

public void setPro_generic_code(String pro_generic_code) { 
    this.pro_generic_code = pro_generic_code; 
} 

public String getPro_generic_name() { 
    return pro_generic_name; 
} 

public void setPro_generic_name(String pro_generic_name) { 
    this.pro_generic_name = pro_generic_name; 
} 

public Integer getProduct_stock() { 
    return product_stock; 
} 

public void setProduct_stock(Integer product_stock) { 
    this.product_stock = product_stock; 
} 

public Double getProduct_MRP() { 
    return product_MRP; 
} 

public void setProduct_MRP(Double product_MRP) { 
    this.product_MRP = product_MRP; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel parcel, int i) { 
    parcel.writeString(retailer_id); 
    parcel.writeString(retailer_name); 
    parcel.writeString(product_code); 
    parcel.writeString(product_name); 
    parcel.writeString(pro_packing); 
    parcel.writeString(pro_company); 
    parcel.writeString(pro_generic_code); 
    parcel.writeString(pro_generic_name); 
    parcel.writeInt(product_stock); 
    parcel.writeDouble(product_MRP); 
} 
} 

使這個POJO類之後

gson.fromJson(json, Products_data.class); 
+0

謝謝@ Nikhil夏爾馬爲這 – sachin

+0

如果你的工作爲你打動,最受歡迎:)謝謝! –

+0

以及如何加載到可搜索的微調,就像我已經用json – sachin