Reputation: 225
I have an android file in which i retrieve JSON
data from server and then i insert it into sqlite
database and then display it into listView
customAdapter
.
But every time i go to another activity and return to the main one , it keeps inserting in the table again .. how can i prevent this??
here is the code :
package com.example.mvctest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import sereen.sql.Details_info;
import sereen.sql.Info;
import sereen.sql.InfoServicesNew;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class PenddingOrders extends Activity {
ArrayList<Info> info=new ArrayList<Info>();
ListView list;
ProgressDialog pd;
private String defValue = "N/A";
InfoServicesNew databaseHelper;
String name=InfoServicesNew.DB_TABLE_NAME;
String name2=InfoServicesNew.DB_TABLE_NAME5;
static int img=R.drawable.ex2;
String data;
Intent o;
int position;
Object object;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pendding_orders);
setTitle("الطلبات الجديدة");
databaseHelper = new InfoServicesNew(this);
list=(ListView)findViewById(R.id.listView1);
pd = new ProgressDialog(this);
new asy().execute("http://192.168.1.113/JsonRoot/transitions/Pendding_orders.json");
// new asy().execute("http://jsonblob.com/api/jsonBlob/53021f22e4b0f9ce1677329a");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pendding_orders, menu);
return true;
}
public class asy extends AsyncTask<String, String, ArrayList<Info>>
{
@Override
protected ArrayList<Info> doInBackground(String... params) {
// TODO Auto-generated method stub
//activity is defined as a global variable in your AsyncTask
try {
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(params[0]);
HttpResponse hr = hc.execute(hg);
HttpEntity he = hr.getEntity();
data = EntityUtils.toString(he);
Log.i("data", data);
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<Info> sereenlist = new ArrayList<Info>();
sereenlist = getJSONData(data);
return sereenlist;
}
private ArrayList<Info> getJSONData(String data) {
// TODO Auto-generated method stub
String id = null;
String item=null;
String amount=null;
String unit=null;
String price=null;
String total_price=null;
ArrayList<Info> rs = null;
try {
JSONObject obj = new JSONObject(data);
JSONArray finalObj = obj.optJSONArray("orders");
for (int i = 0; i < finalObj.length(); i++)
{
final String orderNumber = finalObj.optJSONObject(i).optString(
"order-number");
final String orderAmount = finalObj.optJSONObject(i).optString(
"order-amount");
final String date = finalObj.optJSONObject(i).optString(
"date");
final String client = finalObj.optJSONObject(i).optString(
"client");
final String upperLimit = finalObj.optJSONObject(i).optString(
"upper-limit");
final String debt = finalObj.optJSONObject(i).optString(
"debt");
JSONArray details = finalObj.getJSONObject(i).getJSONArray("details");
for(int j=0; j<details.length(); j++)
{
id = details.getJSONObject(j).optString("id");
item = details.getJSONObject(j).optString("item");
amount = details.getJSONObject(j).optString("amount");
unit = details.getJSONObject(j).optString("unit");
price = details.getJSONObject(j).optString("price");
total_price = details.getJSONObject(j).optString("total-price");
// Log.e("id", id);
// Log.e("item", item);
// Log.e("amount", amount);
// Log.e("unit", unit);
// Log.e("price", price);
// Log.e("total_price", total_price);
}
long id1=databaseHelper.insert(new Info(client,orderAmount,date ,orderNumber,upperLimit,debt,img),name);
databaseHelper.insert_details(new Details_info(id,item,amount ,unit,price,total_price,orderNumber),name2);
}
rs = databaseHelper.selectAll(name,img);
databaseHelper.close();
Log.i("size", finalObj.length()+"");
}//try end
catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return rs;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd.setTitle("fetching");
pd.setMessage("waiting...");
pd.show();
}
@Override//
protected void onPostExecute(ArrayList<Info> result) {
// TODO Auto-generated method stub
ArrayList<Info> rs = null;
rs = databaseHelper.selectAll(name,img);
SetAdapterList(rs);
//SetAdapterList(result);
pd.dismiss();
}
private void SetAdapterList(ArrayList<Info> result)
{
// TODO Auto-generated method stub
CustomAdapter adapter=new CustomAdapter(getApplicationContext(), result);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent i=new Intent(PenddingOrders.this,Details.class);
int myId=arg2;
object = list.getItemAtPosition(arg2);
Info detail = (Info) object;
String client = detail.getClient();
String orderAmount = detail.getOrderAmount();
String date=detail.getdate();
String orderNumber=detail.getorderNumber();
String upperLimit=detail.getupperLimit();
String debt=detail.getdept();
// Log.e("value is ", client);
// Log.e("value is1 ", orderAmount);
i.putExtra("myid", ""+myId);
i.putExtra("client", ""+ client);
i.putExtra("orderAmount", ""+orderAmount);
i.putExtra("date", date);
i.putExtra("orderNumber", orderNumber);
i.putExtra("upperLimit", upperLimit);
i.putExtra("debt", debt);
startActivity(i);
}
});
//
}
}
}
and here is my InfoServiceNew.java class :
package sereen.sql;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class InfoServicesNew extends SQLiteOpenHelper{
private String KEY_ID = "ID";
private String KEY_CLIENT = "CLIENT";
private String KEY_ORDER_AMOUNT = "ORDERAMOUNT";
private String KEY_DATE = "DATE";
private String KEY_ORDER_NUMBER = "ORDERNUMBER";
private String KEY_UPPER_LIMIT = "UPPERLIMIT";
private String KEY_DEBT = "DEBT";
private String KEY_ITEM_ID = "ITEMID";
private String KEY_ITEM = "ITEM";
private String KEY_AMOUNT = "AMOUNT";
private String KEY_UNIT = "UNIT";
private String KEY_PRICE = "PRICE";
private String KEY_TOTAL_PRICE = "TOTALPRICE";
private static String DB_NAME = "FUCHES";
public static String DB_TABLE_NAME = "PENDDINGORDERS";
public static String DB_TABLE_NAME2 = "APPROVEDORDERS";
public static String DB_TABLE_NAME3 = "DENIEDORDERS";
public static String DB_TABLE_NAME4 = "HISTORY";
public static String DB_TABLE_NAME5 = "DETAILS";
private static int DB_VERSION = 16;
private static SQLiteDatabase database;
public InfoServicesNew(Context context) {
super(context, DB_NAME, null, DB_VERSION);
database = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DB_TABLE_NAME + " (" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_CLIENT+" TEXT," +
KEY_ORDER_AMOUNT+" TEXT," +
KEY_DATE +" TEXT," + KEY_ORDER_NUMBER + " TEXT ," +
KEY_UPPER_LIMIT + " TEXT ,"+ KEY_DEBT +" TEXT );");
db.execSQL("CREATE TABLE " + DB_TABLE_NAME2 + " (" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_CLIENT+" TEXT," +
KEY_ORDER_AMOUNT+" TEXT," +
KEY_DATE +" TEXT," + KEY_ORDER_NUMBER + " TEXT ," +
KEY_UPPER_LIMIT + " TEXT ,"+ KEY_DEBT +" TEXT );");
db.execSQL("CREATE TABLE " + DB_TABLE_NAME3 + " (" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_CLIENT+" TEXT," +
KEY_ORDER_AMOUNT+" TEXT," +
KEY_DATE +" TEXT," + KEY_ORDER_NUMBER + " TEXT ," +
KEY_UPPER_LIMIT + " TEXT ,"+ KEY_DEBT +" TEXT );");
db.execSQL("CREATE TABLE " + DB_TABLE_NAME4 + " (" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_CLIENT+" TEXT," +
KEY_ORDER_AMOUNT+" TEXT," +
KEY_DATE +" TEXT," + KEY_ORDER_NUMBER + " TEXT ," +
KEY_UPPER_LIMIT + " TEXT ,"+ KEY_DEBT +" TEXT );");
db.execSQL("CREATE TABLE " + DB_TABLE_NAME5 + " (" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT , " + KEY_ITEM_ID+" TEXT," + KEY_ORDER_NUMBER+" TEXT," +
KEY_ITEM+" TEXT," +
KEY_AMOUNT +" TEXT," + KEY_UNIT + " TEXT ," +
KEY_PRICE + " TEXT ,"+ KEY_TOTAL_PRICE +" TEXT );");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_NAME2);
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_NAME3);
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_NAME4);
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_NAME5);
onCreate(db);
}
public ArrayList<Info> selectAll(String Db_name, int img) {
String columns[] = new String[] { KEY_ID, KEY_CLIENT,KEY_ORDER_AMOUNT, KEY_DATE ,KEY_ORDER_NUMBER,KEY_UPPER_LIMIT,KEY_DEBT};
Cursor c = database.query(Db_name, columns, null, null,null,null,null);
int idIndex = c.getColumnIndex(KEY_ID);
int clientIndex = c.getColumnIndex(KEY_CLIENT);
int orderamountIndex = c.getColumnIndex(KEY_ORDER_AMOUNT);
int dateIndex = c.getColumnIndex(KEY_DATE);
int ordernumberIndex = c.getColumnIndex(KEY_ORDER_NUMBER);
int upperlimitIndex = c.getColumnIndex(KEY_UPPER_LIMIT);
int deptIndex = c.getColumnIndex(KEY_DEBT);
ArrayList<Info> list = new ArrayList<Info>();
if (c.moveToFirst()) {
do {
list.add(new Info(c.getInt(idIndex), c.getString(clientIndex), c.getString(orderamountIndex), c.getString(dateIndex),c.getString(ordernumberIndex),c.getString(upperlimitIndex),c.getString(deptIndex),img));
} while (c.moveToNext());
}
return list;
}
public ArrayList<Details_info> selectAllDetails(String Db_name) {
String columns[] = new String[] { KEY_ID, KEY_ITEM_ID,KEY_ORDER_NUMBER,KEY_ITEM, KEY_AMOUNT ,KEY_UNIT,KEY_PRICE,KEY_TOTAL_PRICE};
Cursor c = database.query(Db_name, columns, null, null,null,null,null);
int idIndex = c.getColumnIndex(KEY_ID);
int itemidIndex = c.getColumnIndex(KEY_ITEM_ID);
int ordernumberIndex = c.getColumnIndex(KEY_ORDER_NUMBER);
int itemIndex = c.getColumnIndex(KEY_ITEM);
int amountIndex = c.getColumnIndex(KEY_AMOUNT);
int unitIndex = c.getColumnIndex(KEY_UNIT);
int priceIndex = c.getColumnIndex(KEY_PRICE);
int totalpriceIndex = c.getColumnIndex(KEY_TOTAL_PRICE);
ArrayList<Details_info> list = new ArrayList<Details_info>();
if (c.moveToFirst()) {
do {
list.add(new Details_info(c.getInt(idIndex), c.getString(itemidIndex), c.getString(ordernumberIndex), c.getString(itemIndex),c.getString(amountIndex),c.getString(unitIndex),c.getString(priceIndex),c.getString(totalpriceIndex)));
} while (c.moveToNext());
}
return list;
}
public long insert(Info info, String DB_name) {
ContentValues cv = new ContentValues();
cv.put(KEY_CLIENT, info.getClient());
cv.put(KEY_ORDER_AMOUNT, info.getOrderAmount());
cv.put(KEY_DATE, info.getdate());
cv.put(KEY_ORDER_NUMBER, info.getorderNumber());
cv.put(KEY_UPPER_LIMIT, info.getupperLimit());
cv.put(KEY_DEBT, info.getdept());
return database.insert(DB_name, null, cv);
}
public long update(Info info,String DB_name) {
ContentValues cv = new ContentValues();
cv.put(KEY_CLIENT, info.getClient());
cv.put(KEY_ORDER_AMOUNT, info.getOrderAmount());
cv.put(KEY_DATE, info.getdate());
cv.put(KEY_ORDER_NUMBER, info.getorderNumber());
cv.put(KEY_UPPER_LIMIT, info.getupperLimit());
cv.put(KEY_DEBT, info.getdept());
return database.update(DB_name, cv,
KEY_ID + " = " + info.getId(), null);
}
public long insert_details(Details_info detail, String name2) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_ITEM_ID, detail.getItemid());
cv.put(KEY_ITEM , detail.getItem());
cv.put(KEY_AMOUNT, detail.getAmount());
cv.put(KEY_UNIT, detail.getUnit());
cv.put(KEY_PRICE, detail.getPrice());
cv.put(KEY_TOTAL_PRICE, detail.getTotalprice());
cv.put(KEY_ORDER_NUMBER, detail.getOrdernumber());
return database.insert(name2, null, cv);
}
public long update_details(Details_info detail,String DB_name) {
ContentValues cv = new ContentValues();
cv.put(KEY_ITEM_ID, detail.getItemid());
cv.put(KEY_ITEM , detail.getItem());
cv.put(KEY_AMOUNT, detail.getAmount());
cv.put(KEY_UNIT, detail.getUnit());
cv.put(KEY_PRICE, detail.getPrice());
cv.put(KEY_TOTAL_PRICE, detail.getTotalprice());
cv.put(KEY_ORDER_NUMBER, detail.getOrdernumber());
return database.update(DB_name, cv,
KEY_ID + " = " + detail.getId(), null);
}
public long delete_details(int id,String Db_name) {
return database.delete(Db_name, KEY_ID + " = " + id, null);
}
public long delete(int id, String name2) {
// TODO Auto-generated method stub
return database.delete(name2, KEY_ID + " = " + id, null) ;
}
}
Upvotes: 1
Views: 3370
Reputation: 29632
Since you want to insert data one time as per the session, You can perform a check operation in following way,
if ( isDataLoaded ) // a boolean variable for checking
{
rs = databaseHelper.selectAll(name,img);
SetAdapterList(rs);
}
else
{
// new asy().execute("http://192.168.1.113/JsonRoot/transitions/Pendding_orders.json");
new asy().execute("http://jsonblob.com/api/jsonBlob/53021f22e4b0f9ce1677329a");
}
Here is the complete working code:
public class PenddingOrders extends Activity {
ArrayList<Info> info=new ArrayList<Info>();
static boolean isDataLoaded = false;
ListView list;
ProgressDialog pd;
private String defValue = "N/A";
InfoServicesNew databaseHelper;
String name=InfoServicesNew.DB_TABLE_NAME;
String name2=InfoServicesNew.DB_TABLE_NAME5;
static int img=R.drawable.ex2;
String data;
Intent o;
int position;
Object object;
ArrayList<Info> rs = null;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pendding_orders);
setTitle("الطلبات الجديدة");
if ( databaseHelper == null )
{
databaseHelper = new InfoServicesNew(this);
}
System.out.println ( "isDataLoaded:" + isDataLoaded );
list = (ListView)findViewById(R.id.listView1);
pd = new ProgressDialog(this);
if ( isDataLoaded )
{
rs = databaseHelper.selectAll(name,img);
SetAdapterList(rs);
}
else
{
// new asy().execute("http://192.168.1.113/JsonRoot/transitions/Pendding_orders.json");
new asy().execute("http://jsonblob.com/api/jsonBlob/53021f22e4b0f9ce1677329a");
}
}
private void SetAdapterList(ArrayList<Info> result)
{
// TODO Auto-generated method stub
CustomAdapter adapter=new CustomAdapter(getApplicationContext(), result);
list.setAdapter(adapter);
System.out.println ( "Size : " + list.getCount() );
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
Intent i=new Intent(PenddingOrders.this,Details.class);
int myId=arg2;
object = list.getItemAtPosition(arg2);
Info detail = (Info) object;
String client = detail.getClient();
String orderAmount = detail.getOrderAmount();
String date=detail.getdate();
String orderNumber=detail.getorderNumber();
String upperLimit=detail.getupperLimit();
String debt=detail.getdept();
i.putExtra("myid", ""+myId);
i.putExtra("client", ""+ client);
i.putExtra("orderAmount", ""+orderAmount);
i.putExtra("date", date);
i.putExtra("orderNumber", orderNumber);
i.putExtra("upperLimit", upperLimit);
i.putExtra("debt", debt);
startActivity(i);
finish();
}
});
//
}
public class asy extends AsyncTask<String, String, ArrayList<Info>>
{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd.setTitle("fetching");
pd.setMessage("waiting...");
pd.show();
}
@Override
protected ArrayList<Info> doInBackground(String... params) {
// TODO Auto-generated method stub
//activity is defined as a global variable in your AsyncTask
try {
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(params[0]);
HttpResponse hr = hc.execute(hg);
HttpEntity he = hr.getEntity();
data = EntityUtils.toString(he);
Log.i("data", data);
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<Info> sereenlist = new ArrayList<Info>();
sereenlist = getJSONData(data);
return sereenlist;
}
private ArrayList<Info> getJSONData(String data) {
// TODO Auto-generated method stub
String id = null;
String item=null;
String amount=null;
String unit=null;
String price=null;
String total_price=null;
ArrayList<Info> rs = null;
if ( isDataLoaded == false )
{
try
{
JSONObject obj = new JSONObject(data);
JSONArray finalObj = obj.optJSONArray("orders");
for (int i = 0; i < finalObj.length(); i++)
{
final String orderNumber = finalObj.optJSONObject(i).optString(
"order-number");
final String orderAmount = finalObj.optJSONObject(i).optString(
"order-amount");
final String date = finalObj.optJSONObject(i).optString(
"date");
final String client = finalObj.optJSONObject(i).optString(
"client");
final String upperLimit = finalObj.optJSONObject(i).optString(
"upper-limit");
final String debt = finalObj.optJSONObject(i).optString(
"debt");
JSONArray details = finalObj.getJSONObject(i).getJSONArray("details");
for(int j=0; j<details.length(); j++)
{
id = details.getJSONObject(j).optString("id");
item = details.getJSONObject(j).optString("item");
amount = details.getJSONObject(j).optString("amount");
unit = details.getJSONObject(j).optString("unit");
price = details.getJSONObject(j).optString("price");
total_price = details.getJSONObject(j).optString("total-price");
}
long id1=databaseHelper.insert(new Info(client,orderAmount,date,orderNumber,upperLimit,debt,img),name);
databaseHelper.insert_details(new Details_info(id,item,amount,unit,price,total_price,orderNumber),name2);
}
rs = databaseHelper.selectAll(name,img);
Log.i("size", finalObj.length()+"");
}//try end
catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return rs;
}
@Override//
protected void onPostExecute(ArrayList<Info> result)
{
// TODO Auto-generated method stub
//SetAdapterList(result);
isDataLoaded = true;
rs = databaseHelper.selectAll(name,img);
SetAdapterList(rs);
pd.dismiss();
}
}
@Override
public void onStop()
{
super.onStop();
if ( databaseHelper != null )
{
databaseHelper.close();
}
System.out.println ( "db closed" );
}
}
Upvotes: 1
Reputation: 10009
You can use SharedPreference
to monitor the state of your insertion. Create a boolean
SharedPreference
with a default value of false
and When you insert your value, put its value with true
and check this Preference each time you enter this scoop of code. Use the following two methods to your code
Call the following method after you insert the date into the database at the first time.
Setter:
public void setInsertedToDB(){
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.putBoolean("key", true);
editor.commit();
}
Check for the following method return
value before you add to database.
Getter:
public boolean isInsertedBeforeToDB(){
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
sharedpreferences.getBoolean("key", false);//False is the default value
}
Read this link for more info about the SharedPreferences
. I hope it helps.
Using SQLite
:
You can do it by creating a Unique attribute for the required Row
using OnConflect IGNORE
feature.
Example:
id INTEGER PRIMARY_KEY ON CONFLICT REPLACE
Upvotes: 3