· 10 years ago · Sep 04, 2016, 09:52 AM
1public class Products implements Parcelable {
2
3@SerializedName("Product")
4@Expose
5private Product products;
6@SerializedName("ProductMerchants")
7@Expose
8private List<ProductMerchant> productMerchants = new ArrayList<ProductMerchant>();
9
10public Products() {
11 this.products = products;
12 this.productMerchants = productMerchants;
13}
14
15
16public Product getProducts() {
17 return products;
18}
19
20
21public void setProducts(Product Products) {
22 this.products = Products;
23}
24
25
26public List<ProductMerchant> getProductMerchants() {
27 return productMerchants;
28}
29
30public void setProductMerchants(List<ProductMerchant> productMerchants) {
31 this.productMerchants = productMerchants;
32}
33
34public static Comparator<Products> productAscendSort = new Comparator<Products>() {
35 @Override
36 public int compare(Products p1, Products p2) {
37
38 double product1=p1.getProducts().getPrice();
39 double product2=p2.getProducts().getPrice();
40
41 return Double.compare(product1,product2);
42 }
43};
44
45public static Comparator<Products> productDescendSort = new Comparator<Products>() {
46 @Override
47 public int compare(Products p1, Products p2) {
48
49 double product1=p1.getProducts().getPrice();
50 double product2=p2.getProducts().getPrice();
51
52 return Double.compare(product2,product1);
53 }
54};
55
56
57@Override
58public int describeContents() {
59 return 0;
60}
61
62@Override
63public void writeToParcel(Parcel dest, int flags) {
64 dest.writeParcelable(this.products, flags);
65 // dest.writeList(this.productMerchants);
66}
67
68
69
70protected Products(Parcel in) {
71 this.products = in.readParcelable(Product.class.getClassLoader());
72 this.productMerchants = new ArrayList<ProductMerchant>();
73 in.readList(this.productMerchants, ProductMerchant.class.getClassLoader());
74}
75
76public static final Parcelable.Creator<Products> CREATOR = new Parcelable.Creator<Products>() {
77 @Override
78 public Products createFromParcel(Parcel source) {
79 return new Products(source);
80 }
81
82 @Override
83 public Products[] newArray(int size) {
84 return new Products[size];
85 }
86};
87}
88
89import android.os.Parcel;
90import android.os.Parcelable;
91
92import javax.annotation.Generated;
93import com.google.gson.annotations.Expose;
94import com.google.gson.annotations.SerializedName;
95import java.util.Comparator;
96import java.util.jar.Attributes;
97
98@Generated("org.jsonschema2pojo")
99public class Product implements Parcelable {
100
101@SerializedName("id")
102@Expose
103private String id;
104@SerializedName("name")
105@Expose
106private String name;
107@SerializedName("description")
108@Expose
109private String description;
110@SerializedName("price")
111@Expose
112private double price;
113@SerializedName("unit_price")
114@Expose
115private String unitPrice;
116@SerializedName("product_type_id")
117@Expose
118private String productTypeId;
119@SerializedName("image_url")
120@Expose
121private String imageUrl;
122@SerializedName("shopping_list_item_id")
123@Expose
124private String shoppingListItemId;
125@SerializedName("shopping_cart_item_id")
126@Expose
127private String shoppingCartItemId;
128
129public Product() {
130 this.id = id;
131 this.name = name;
132 this.description = description;
133 this.price = price;
134 this.unitPrice = unitPrice;
135 this.productTypeId = productTypeId;
136 this.imageUrl = imageUrl;
137 this.shoppingListItemId = shoppingListItemId;
138 this.shoppingCartItemId = shoppingCartItemId;
139}
140
141public String getId() {
142 return id;
143}
144
145public void setId(String id) {
146 this.id = id;
147}
148
149public String getName() {
150 return name;
151}
152
153public void setName(String name) {
154 this.name = name;
155}
156
157public String getDescription() {
158 return description;
159}
160
161public void setDescription(String description) {
162 this.description = description;
163}
164
165
166public double getPrice() {
167 return price;
168}
169
170public void setPrice(double price) {
171 this.price = price;
172}
173
174public String getUnitPrice() {
175 return unitPrice;
176}
177
178public void setUnitPrice(String unitPrice) {
179 this.unitPrice = unitPrice;
180}
181
182public String getProductTypeId() {
183 return productTypeId;
184}
185
186public void setProductTypeId(String productTypeId) {
187 this.productTypeId = productTypeId;
188}
189
190public String getImageUrl() {
191 return imageUrl;
192}
193
194public void setImageUrl(String imageUrl) {
195 this.imageUrl = imageUrl;
196}
197
198public String getShoppingListItemId() {
199 return shoppingListItemId;
200}
201
202public void setShoppingListItemId(String shoppingListItemId) {
203 this.shoppingListItemId = shoppingListItemId;
204}
205
206public String getShoppingCartItemId() {
207 return shoppingCartItemId;
208}
209
210public void setShoppingCartItemId(String shoppingCartItemId) {
211 this.shoppingCartItemId = shoppingCartItemId;
212}
213
214
215@Override
216public int describeContents() {
217 return 0;
218}
219
220 @Override
221 public void writeToParcel(Parcel dest, int flags) {
222 dest.writeString(this.id);
223 dest.writeString(this.name);
224 dest.writeString(this.description);
225 dest.writeDouble(this.price);
226 dest.writeString(this.unitPrice);
227 dest.writeString(this.productTypeId);
228 dest.writeString(this.imageUrl);
229 dest.writeString(this.shoppingListItemId);
230 dest.writeString(this.shoppingCartItemId);
231 }
232
233
234protected Product(Parcel in) {
235 this.id = in.readString();
236 this.name = in.readString();
237 this.description = in.readString();
238 this.price = in.readDouble();
239 this.unitPrice = in.readString();
240 this.productTypeId = in.readString();
241 this.imageUrl = in.readString();
242 this.shoppingListItemId = in.readString();
243 this.shoppingCartItemId = in.readString();
244}
245
246public static final Creator<Product> CREATOR = new Creator<Product>() {
247 @Override
248 public Product createFromParcel(Parcel source) {
249 return new Product(source);
250 }
251
252 @Override
253 public Product[] newArray(int size) {
254 return new Product[size];
255 }
256};
257}
258
259import android.provider.BaseColumns;
260
261
262public class ProductContract implements BaseColumns {
263
264
265public static final String TABLE_NAME = "product";
266
267public static final String COLUMN_ID="id";
268public static final String COLUMN_NAME="name";
269public static final String COLUMN_DESCRIPTION="description";
270public static final String COLUMN_PRICE="price";
271public static final String COLUMN_UNIT_PRICE="unit_price";
272public static final String COLUMN_IMAGE_URL="image_url";
273public static final String COLUMN_PRODUCT_TYPE_ID="product_type_id";
274public static final String COLUMN_SHOPPING_LIST_ITEM_ID="shopping_list_item_id";
275public static final String COLUMN_SHOPPING_CART_ITEM_ID="shopping_cart_item_id";
276
277
278}
279
280import android.content.ContentValues;
281import android.content.Context;
282import android.database.Cursor;
283import android.database.DatabaseUtils;
284import android.database.sqlite.SQLiteDatabase;
285import android.database.sqlite.SQLiteOpenHelper;
286import android.util.Log;
287
288import java.util.ArrayList;
289import java.util.List;
290
291public class ProductDbHelper extends SQLiteOpenHelper {
292
293private static final int DATABASE_VERSION = 1;
294
295static final String DATABASE_NAME = "products.db";
296
297
298public ProductDbHelper(Context context) {
299 super(context, DATABASE_NAME,null, DATABASE_VERSION);
300}
301
302@Override
303public void onCreate(SQLiteDatabase sqLiteDatabase) {
304 final String SQL_CREATE_PRODUCT_TABLE = "CREATE TABLE " + ProductContract.TABLE_NAME + " (" +
305
306 ProductContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
307 ProductContract.COLUMN_ID+ " TEXT NOT NULL, " +
308 ProductContract.COLUMN_NAME + " TEXT, " +
309 ProductContract.COLUMN_DESCRIPTION + " TEXT, " +
310 ProductContract.COLUMN_PRICE + " REAL," +
311 ProductContract.COLUMN_IMAGE_URL + " TEXT, " +
312 ProductContract.COLUMN_PRODUCT_TYPE_ID + " TEXT, " +
313 ProductContract.COLUMN_SHOPPING_CART_ITEM_ID + " TEXT, " +
314 ProductContract.COLUMN_SHOPPING_LIST_ITEM_ID + " TEXT, " +
315 ProductContract.COLUMN_UNIT_PRICE + " TEXT) " ;
316
317 sqLiteDatabase.execSQL(SQL_CREATE_PRODUCT_TABLE);
318
319}
320
321@Override
322public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
323
324 sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + ProductContract.TABLE_NAME);
325 onCreate(sqLiteDatabase);
326
327}
328
329 // Getting All Shops
330 public List<Products> getAllShops() {
331 List<Products> shopList = new ArrayList<>();
332 // Select All Query
333 String selectQuery = "SELECT * FROM " + ProductContract.TABLE_NAME;
334 SQLiteDatabase db = this.getWritableDatabase();
335 Cursor cursor = db.rawQuery(selectQuery, null);
336 // looping through all rows and adding to list
337 if (cursor !=null && cursor.moveToFirst()) {
338 do {
339 Products shop = new Products();
340 shop.getProducts().setPrice(Double.parseDouble(cursor.getString(cursor.getColumn Index(ProductContract.COLUMN_PRICE))));
341 shop.getProducts().setName(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_NAME)));
342 shop.getProducts().setId(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_ID)));
343 shop.getProducts().setDescription(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_DESCRIPTION)));
344 shop.getProducts().setImageUrl(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_IMAGE_URL)));
345 shop.getProducts().setProductTypeId(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_PRODUCT_TYPE_ID)));
346 shop.getProducts().setShoppingListItemId(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_SHOPPING_LIST_ITEM_ID)));
347 shop.getProducts().setUnitPrice(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_UNIT_PRICE)));
348 shop.getProducts().setShoppingCartItemId(cursor.getString(cursor.getColumnIndex(ProductContract.COLUMN_SHOPPING_CART_ITEM_ID)));
349
350 shopList.add(shop);
351 } while (cursor.moveToNext());
352 }
353
354 return shopList;
355}
356
357 // Adding new shop
358 public void addShop(Products shop) {
359 SQLiteDatabase db = this.getWritableDatabase();
360 ContentValues values = new ContentValues();
361 values.put(ProductContract.COLUMN_ID, shop.getProducts().getId());
362 values.put(ProductContract.COLUMN_NAME, shop.getProducts().getName());
363 values.put(ProductContract.COLUMN_DESCRIPTION, shop.getProducts().getDescription());
364 values.put(ProductContract.COLUMN_IMAGE_URL, shop.getProducts().getImageUrl());
365 values.put(ProductContract.COLUMN_PRICE,shop.getProducts().getPrice());
366 values.put(ProductContract.COLUMN_PRODUCT_TYPE_ID, shop.getProducts().getProductTypeId());
367 values.put(ProductContract.COLUMN_UNIT_PRICE, shop.getProducts().getUnitPrice());
368 values.put(ProductContract.COLUMN_SHOPPING_CART_ITEM_ID, shop.getProducts().getShoppingCartItemId());
369 values.put(ProductContract.COLUMN_SHOPPING_LIST_ITEM_ID, shop.getProducts().getShoppingListItemId());
370 // Inserting Row
371 long rwoID = db.insert(ProductContract.TABLE_NAME, null, values);
372 Log.v("ProductDbHelper","addShop >>> rwoID = "+rwoID);
373 db.close(); // Closing database connection
374}
375
376}
377
378public class FirstFragment extends Fragment implements ClickListner {
379
380private final String LOG_TAG = FirstFragment.class.getSimpleName();
381private DisplayAdapter recyclerViewAdapter;
382private RecyclerView recyclView;
383private ArrayList<Products> pProduct = null;
384private List<Products> shop = new ArrayList<>();
385private List<Products>prods=null;
386ProductDbHelper pDB;
387ProgressDialog mProgressDialog;
388
389
390public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
391
392 View myView = inflater.inflate(R.layout.all_products, container, false);
393
394 mProgressDialog = new ProgressDialog(getActivity());
395 mProgressDialog.setIndeterminate(true);
396 mProgressDialog.setMessage("Loading...");
397 mProgressDialog.show();
398
399 return myView;
400}
401
402
403@Override
404public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
405 super.onViewCreated(view, savedInstanceState);
406
407 recyclView = (RecyclerView) view.findViewById(R.id.RecycleList);
408 pDB=new ProductDbHelper(getActivity());
409 List<Products> shops = pDB.getAllShops();
410 RestInterface interfaces=Client.getClient().create(RestInterface.class);
411
412 Call<List<Products>> call = interfaces.getProductsReport();
413 call.enqueue(new Callback<List<Products>>() {
414
415 @Override
416 public void onResponse(Call<List<Products>> call, Response<List<Products>> response) {
417
418 prods = response.body();
419
420
421 for(int i =0;i<prods.size();i++){
422 pDB.addShop(prods.get(i));
423
424 }
425 // i want to do this
426 shop=pDb.getAllShops();
427
428 if(prods!=null)
429 {
430 if (recyclerViewAdapter!=null)
431 {
432 recyclerViewAdapter.setData(prods);
433 }
434
435 else
436 {
437 pProduct=new ArrayList<Products>();
438 pProduct.addAll(prods);
439 }
440 }
441
442
443 if (mProgressDialog.isShowing())
444 mProgressDialog.dismiss();
445
446
447 }
448
449 @Override
450 public void onFailure(Call<List<Products>> call, Throwable t) {
451
452 Log.e(LOG_TAG, "FFFF" +t.toString());
453 }
454 });
455
456
457
458 StaggeredGridLayoutManager layoutManager =new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
459
460 recyclView.setLayoutManager(layoutManager);
461
462 recyclerViewAdapter = new DisplayAdapter(getActivity(),new ArrayList<Products>());
463 recyclView.setAdapter(recyclerViewAdapter);
464 recyclerViewAdapter.setClickListener(this);
465
466
467}
468
469E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.suzanelsamahy.productsviewer, PID: 26031
470java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.suzanelsamahy.productsviewer/com.example.suzanelsamahy.productsviewer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.suzanelsamahy.productsviewer.POJO.Product.setPrice(double)' on a null object reference
471 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
472 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
473 at android.app.ActivityThread.-wrap11(ActivityThread.java)
474 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
475 at android.os.Handler.dispatchMessage(Handler.java:102)
476 at android.os.Looper.loop(Looper.java:148)
477 at android.app.ActivityThread.main(ActivityThread.java:5417)
478 at java.lang.reflect.Method.invoke(Native Method)
479 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
480 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
481 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.suzanelsamahy.productsviewer.POJO.Product.setPrice(double)' on a null object reference
482 at com.example.suzanelsamahy.productsviewer.data.ProductDbHelper.getAllShops(ProductDbHelper.java:80)
483 at com.example.suzanelsamahy.productsviewer.FirstFragment.onViewCreated(FirstFragment.java:126)
484 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1123)
485 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
486 at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
487 at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
488 at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
489 at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619)
490 at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
491 at android.app.Activity.performStart(Activity.java:6253)
492 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
493 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)Â
494 at android.app.ActivityThread.-wrap11(ActivityThread.java)Â
495 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)Â
496 at android.os.Handler.dispatchMessage(Handler.java:102)Â
497 at android.os.Looper.loop(Looper.java:148)Â
498 at android.app.ActivityThread.main(ActivityThread.java:5417)Â
499 at java.lang.reflect.Method.invoke(Native Method)Â
500 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)Â
501 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)Â