Data wont insert and display on my app | Android Studio - java

My app isn't displaying the data i'm inserting into the interface, i'm creating a fighter database where my coach can add fighters from the gym into it. I'm using a card view and recycling adaptor to display all the data but when I click submit it wont display.
Error log:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private ArrayList<Item>list = new ArrayList<Item>();
private ItemAdapter adapter;
private RecyclerView recyclerView;
private AlertDialog dialog;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fetchRecords();
fab.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
LayoutInflater inflater = getLayoutInflater();
View mView1 = inflater.inflate(R.layout.activity_add,null);
final EditText input_name = (EditText) mView1.findViewById(R.id.Name);
final EditText input_age = (EditText) mView1.findViewById(R.id.Age);
final EditText input_weight = (EditText) mView1.findViewById(R.id.Weight);
final EditText input_height = (EditText) mView1.findViewById(R.id.Height);
final EditText input_reach = (EditText) mView1.findViewById(R.id.Reach);
final Button btnSave = (Button) mView1.findViewById(R.id.btnSave);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(mView1).setTitle("Add new Record")
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
String name = input_name.getText().toString();
String age = input_age.getText().toString();
String weight = input_weight.getText().toString();
String height = input_height.getText().toString();
String reach = input_reach.getText().toString();
if (name.equals("") && age.equals("") && weight.equals("") && height.equals("")&& reach.equals("")){
Snackbar.make(view,"Field incomplete",Snackbar.LENGTH_SHORT).show();
}else {
Save(name,age,name,height,reach);
dialog.dismiss();
Snackbar.make(view,"Saving",Snackbar.LENGTH_SHORT).show();
}
}
});
dialog = builder.create();
dialog.show();
}
});
}
public void fetchRecords() {
recyclerView = (RecyclerView) findViewById(R.id.recycler);
adapter = new ItemAdapter(this,list);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
list.clear();
Functions functions = new Functions(MainActivity.this);
ArrayList<Item>data = functions.getAllRecords();
if (data.size()>0){
for (int i = 0; i<data.size(); i++){
int id = data.get(i).getId();
String namel = data.get(i).getName();
String agel = data.get(i).getAge();
String weightl = data.get(i).getWeight();
String heightl = data.get(i).getHeight();
String reachl = data.get(i).getReach();
Item item = new Item();
item.setId(id);
item.setName(namel);
item.setAge(agel);
item.setWeight(weightl);
item.setHeight(heightl);
item.setReach(reachl);
list.add(item);
}adapter.notifyDataSetChanged();
}else {
Toast.makeText(MainActivity.this, "No Records found.", Toast.LENGTH_SHORT).show();
}
}
private void Save(String name, String age, String weight, String height, String reach) {
Functions functions = new Functions(MainActivity.this);
Item item = new Item();
item.setName(name);
item.setAge(age);
item.setWeight(weight);
item.setHeight(height);
item.setReach(reach);
functions.Insert(item);
Toast.makeText(MainActivity.this, "Saved...", Toast.LENGTH_SHORT).show();
fetchRecords();
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
public class Functions extends SQLiteOpenHelper {
private static final String DB_NAME = "crud.db";
private static final int DB_VERSION = 1;
private Fighter fighter = new Fighter();
public Functions(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
#Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(fighter.CREATE_TABLE_PERSON);
}
#Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + fighter.TABLE_FIGHTER);
}
public void Insert(Item item){
SQLiteDatabase database = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(fighter.ID,item.getId());
contentValues.put(fighter.NAME,item.getName());
contentValues.put(fighter.AGE,item.getAge());
contentValues.put(fighter.WEIGHT,item.getWeight());
contentValues.put(fighter.HEIGHT,item.getHeight());
contentValues.put(fighter.REACH,item.getReach());
database.insert(fighter.TABLE_FIGHTER,null,contentValues);
}
public ArrayList<Item>getAllRecords(){
ArrayList<Item>list = new ArrayList<Item>();
SQLiteDatabase database = getReadableDatabase();
String sql = "SELECT * FROM " + fighter.TABLE_FIGHTER;
Cursor cursor = database.rawQuery(sql,null);
if (cursor.moveToFirst()){
do {
Item item = new Item();
item.setId(Integer.parseInt(cursor.getString(0)));
item.setName(cursor.getString(1));
item.setAge(cursor.getString(2));
item.setWeight(cursor.getString(3));
item.setHeight(cursor.getString(4));
item.setReach(cursor.getString(5));
list.add(item);
}while (cursor.moveToNext());
}
cursor.close();
database.close();
return list;
}
public Item getSingleItem(int id){
SQLiteDatabase database = getReadableDatabase();
String sql = "SELECT * FROM " + fighter.TABLE_FIGHTER + " WHERE " + fighter.ID + "=?";
Cursor cursor = database.rawQuery(sql,new String[]{String.valueOf(id)});
if (cursor != null)
cursor.moveToNext();
Item item = new Item();
item.setId(Integer.parseInt(cursor.getString(0)));
item.setName(cursor.getString(1));
item.setAge(cursor.getString(2));
item.setWeight(cursor.getString(3));
item.setHeight(cursor.getString(4));
item.setReach(cursor.getString(4));
cursor.close();
database.close();
return item;
}
public void DeleteItem(int id){
SQLiteDatabase database = getWritableDatabase();
database.delete(fighter.TABLE_FIGHTER,fighter.ID + "=?",new String[]{String.valueOf(id)});
database.close();
}
public void Update(Item item){
SQLiteDatabase database = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(fighter.NAME,item.getName());
contentValues.put(fighter.AGE,item.getAge());
contentValues.put(fighter.WEIGHT,item.getWeight());
contentValues.put(fighter.HEIGHT,item.getHeight());
contentValues.put(fighter.REACH,item.getReach());
database.update(fighter.TABLE_FIGHTER,contentValues,fighter.ID + "=?",new String[]{String.valueOf(item.getId())});
}
}
public class Fighter {
public static final String TABLE_FIGHTER = "fighter";
public static final String ID = "ID";
public static final String NAME = "Name";
public static final String AGE = "Age";
public static final String WEIGHT = "Weight";
public static final String HEIGHT = "Height";
public static final String REACH = "Reach";
public static final String CREATE_TABLE_PERSON = "CREATE TABLE " + TABLE_FIGHTER + "("
+ ID + " INTEGER PRIMARY KEY,"
+ NAME + " TEXT,"
+ AGE + " TEXT,"
+ WEIGHT + " TEXT,"
+ HEIGHT + " TEXT"
+ REACH + " TEXT"+ ")";
}

According to your code, you have missed a comma after + HEIGHT + " TEXT" . therefore table is not created properly due to SQL syntax errors. please try with following. i have added the comma for you.
public static final String CREATE_TABLE_PERSON = "CREATE TABLE " + TABLE_FIGHTER + "("
+ ID + " INTEGER PRIMARY KEY,"
+ NAME + " TEXT,"
+ AGE + " TEXT,"
+ WEIGHT + " TEXT,"
+ HEIGHT + " TEXT,"
+ REACH + " TEXT"+ ")";

Related

SQL Lite Data not being inserted (Android Studio in java)

I want to insert data from user input on the click of a button but it does not get added. In my addData function it is always returning false. I don't seem to understand why this is happening nor do I have any clue where the error is since my code isn't producing any.
Here is my Database Helper code:
private static final String TAG = "DatabaseHelper";
private static final String TABLE_NAME = "nutrition_table";
private static final String COL1 = "ID";
private static final String COL2 = "food";
private static final String COL3 = "calories";
DatabaseHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
#Override
public void onCreate(SQLiteDatabase DB) {
String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL2 + " TEXT" + COL3 + " ,TEXT)" ;
DB.execSQL(createTable);
}
#Override
public void onUpgrade(SQLiteDatabase DB, int i, int i1) {
DB.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(DB);
}
public boolean addData(String item) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
contentValues.put(COL3, item);
Log.d(TAG, "addData: Adding " + item + "to" + TABLE_NAME);
long res = db.insert(TABLE_NAME, null, contentValues);
if (res == -1) {
return false;
} else {
return true;
}
}
public Cursor getData() {
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
}
Here is my addActivity code:
DatabaseHelper mDbhelper;
TextView addFood, addCals;
Button addEntry, deleteEntry;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
addFood = findViewById(R.id.addFoodItemTextView);
addCals = findViewById(R.id.addCaloriesTextView);
addEntry = findViewById(R.id.addBtn);
deleteEntry = findViewById(R.id.deleteBtn);
mDbhelper = new DatabaseHelper(this);
addEntry.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
String foodEntry = addFood.getText().toString();
String calsEntry = addCals.getText().toString();
if (foodEntry.length() != 0) {
addData(foodEntry);
addFood.setText("");
} else {
toastMessage("You have to add data in the food/meal text field!");
}
if (calsEntry.length() != 0) {
addData(calsEntry);
addCals.setText("");
} else {
toastMessage("You have to add data in the calorie text field");
}
}
});
}
public void addData(String newEntry) {
boolean insertData = mDbhelper.addData(newEntry);
if (insertData) {
toastMessage("Added to entries");
} else {
toastMessage("Something went wrong");
}
}
private void toastMessage(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
Here is the code where the data is supposed to be displayed:
private final static String TAG = "listData";
DatabaseHelper dbHelper;
private ListView displayData;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_entries);
displayData = findViewById(R.id.listData);
dbHelper = new DatabaseHelper(this);
populateListView();
}
private void populateListView() {
Log.d(TAG, "populateListView: Displaying data in the ListView.");
Cursor data = dbHelper.getData();
ArrayList<String> listData = new ArrayList<>();
while(data.moveToNext()) {
listData.add(data.getString(1));
listData.add(data.getString(2));
}
ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
displayData.setAdapter(adapter);
}
}
Keep in mind that I am using an intent to view the entries (When the user clicks the button it brings him to the View entries page). I'm not sure where my code went wrong. Any help is greatly appreciated.
Thanks!

database.sqlite.SQLiteOpenHelper.getDatabaseLocked+Null PointerExpception Error Android Studio

I am working on android application that need to get data from table using sqlite and show the specific items in the list view. As I try to run the application the application got error getDatabaseLocked and show error on sqlite database...
here is my sqlite file..
{
private static final int DATABASE_VERSION = 2;
Context context;
private static final String DATABASE_NAME = "DynamicERP.db";
public static final String table_orders = "TABLEORDERS";
public static final String table_poducts_records = "PRODUCTSRECORDS";
public static final String code = "ORDERCODE";
public static final String barcode = "BARCODE";
public static final String nametblp = "NAME";
public static final String size = "SIZE";
public static final String uname = "UNAME";
public static final String retail = "RETAIL";
public static final String wholesale = "WHOLESALE";
public static final String trade = "TRADE";
public static final String percentage = "PERCENTAGE";
public static final String tax = "TAX";
public static final String subcatagary = "SUBCATAGARY";
public static final String categary = "CATEGARY";
public static final String company = "COMPANY";
public static final String type = "TYPE";
public static final String packsize = "PACKSIZE";
public static final String weight = "WEIGHT";
public static final String weightunit = "WEIGHTUNIT";
public static final String currentstock = "CURRENTSTOCK";
public static final String salecode = "SALECODE";
public static final String mcode = "MCODE";
public static final String fname = "FIRSTNAME";
public static final String lname = "LASTNAME";
public static final String urduname = "URDUNAME";
public static final String address = "ADDRESS";
public static final String contact = "CONTACT";
public static final String cnic = "CNIC";
public static final String saletype = "TYPE";
public static final String route = "ROUTE";
public static final String area = "AREA";
public static final String zone = "ZONE";
public static final String balance = "BALANCE";
public static final String creditlimit = "CREDITLIMIT";
public static final String spl = "SPL";
public static final String saletax = "SALETAX";
private static final String DATABASE_ORDERS = "CREATE TABLE " + table_orders + "("
+ code + " INTEGER, " + barcode + " VARCHAR," + nametblp + " VARCHAR," + size + " VARCHAR," + uname +
" VARCHAR," + retail + " VARCHAR," + wholesale + " VARCHAR," + trade + " VARCHAR,"
+ percentage + " VARCHAR," + tax + " VARCHAR," + subcatagary + " VARCHAR," + categary + " VARCHAR," +
company + " VARCHAR," + type + " VARCHAR," + packsize + " VARCHAR," +
weight + " VARCHAR," + weightunit + " VARCHAR, " + currentstock + " VARCHAR );";
private static final String DATABASE_PRODUCTS = "CREATE TABLE " + table_poducts_records + "("
+ salecode + " INTEGER, " + mcode + " VARCHAR, " + fname + " VARCHAR, " + lname + " VARCHAR, " + urduname +
" VARCHAR, " + address + " NVARCHAR, " + contact + " VARCHAR," + cnic + " VARCHAR, " + saletype + " VARCHAR,"
+ route + " VARCHAR, " + area + " VARCHAR," + zone + " VARCHAR," +
balance + " VARCHAR, " + creditlimit + " VARCHAR," + spl + " VARCHAR, " + saletax + " VARCHAR);";
private String DROP_ORDER_REC = "DROP TABLE IF EXISTS " + table_orders;
private String DROP_PRODUCTS_REC = "DROP TABLE IF EXISTS " + table_poducts_records;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_ORDERS);
db.execSQL(DATABASE_PRODUCTS);
}
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_PRODUCTS_REC);
db.execSQL(DROP_ORDER_REC);
onCreate(db);
}
public List<GetSetOrders> getAllOrderData() {
String[] columns = {
nametblp,
code,
retail,
subcatagary,
company
};
String sortOrder = code + " ASC";
SQLiteDatabase db = this.getReadableDatabase();
db.isOpen();
List<GetSetOrders> clientlist = new ArrayList<GetSetOrders>();
Cursor cursor = db.query(table_poducts_records, //Table to query
columns, //columns to return
null, //columns for the WHERE clause
null, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
sortOrder); //The sort order
if (cursor.moveToFirst()) {
do {
GetSetOrders orders = new GetSetOrders();
orders.setNAME(cursor.getString(cursor.getColumnIndex(nametblp)));
orders.setORDERCODE(cursor.getString(cursor.getColumnIndex(code)));
orders.setRETAIL(cursor.getString(cursor.getColumnIndex(retail)));
orders.setCATEGARY(cursor.getString(cursor.getColumnIndex(subcatagary)));
orders.setCOMPANY(cursor.getString(cursor.getColumnIndex(company)));
clientlist.add(orders);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return clientlist;
}
Here is my crash log which shows the error of the database close
Caused by: java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
at com.example.tablewithlist.DatabaseHelper.getAllOrderData(DatabaseHelper.java:182)
at com.example.tablewithlist.Clients$2.doInBackground(Clients.java:67)
at com.example.tablewithlist.Clients$2.doInBackground(Clients.java:63)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
Here is my Adapter Class
{
private List<GetSetOrders> listOrders;
Context mContext;
RecyclerView mRecyclerView;
View itemView;
public ClientRecyclerAdapter(List<GetSetOrders> listOrders, RecyclerView recyclerView) {
this.listOrders = listOrders;
mRecyclerView = recyclerView;
}
#Override
public ClientViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mContext = parent.getContext();
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.items_products_table, parent, false);
return new ClientViewHolder(itemView);
}
public class ClientViewHolder extends RecyclerView.ViewHolder {
//public AppCompatTextView ID;
public TextView lblPName;
public TextView lblTrade;
public TextView lblRetail;
public TextView lblSubCategary;
public TextView lblCompany;
RelativeLayout layout;
public ClientViewHolder(View view) {
super(view);
lblPName = view.findViewById(R.id.lblPName);
lblTrade = view.findViewById(R.id.lblTrade);
lblRetail = view.findViewById(R.id.lblRetail);
lblSubCategary = view.findViewById(R.id.lblSubCategary);
lblCompany = view.findViewById(R.id.lblCompany);
layout = view.findViewById(R.id.listprod);
}
}
#Override
public void onBindViewHolder(ClientViewHolder holder, final int position) {
holder.lblPName.setText(listOrders.get(position).getNAME());
holder.lblTrade.setText(listOrders.get(position).getORDERCODE());
holder.lblRetail.setText(listOrders.get(position).getRETAIL());
holder.lblSubCategary.setText(listOrders.get(position).getSUBCATAGARY());
holder.lblCompany.setText(listOrders.get(position).getCOMPANY());
holder.layout.setOnLongClickListener(new View.OnLongClickListener() {
#Override
public boolean onLongClick(View v) {
Toast.makeText(mContext, "ABC", Toast.LENGTH_SHORT).show();
return false;
}
});
}
#Override
public int getItemCount() {
Log.v(ClientRecyclerAdapter.class.getSimpleName(), "" + listOrders.size());
return listOrders.size();
}
}
This is the main class where I am calling the function of the database...
{
Activity activity;
RecyclerView recyclerViewClients;
Button btnAll;
ClientRecyclerAdapter clientRecyclerAdapter;
List<GetSetOrders> listclients;
DatabaseHelper databaseHelper;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.clients, container, false);
btnAll=view.findViewById(R.id.searchall);
recyclerViewClients=view.findViewById(R.id.Viewclients);
listclients = new ArrayList<>();
clientRecyclerAdapter = new ClientRecyclerAdapter(listclients,recyclerViewClients);
recyclerViewClients.setItemAnimator(new DefaultItemAnimator());
recyclerViewClients.setItemAnimator(new DefaultItemAnimator());
recyclerViewClients.setHasFixedSize(true);
recyclerViewClients.setAdapter(clientRecyclerAdapter);
databaseHelper = new DatabaseHelper(activity);
btnAll.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
getClientFromSqlite();
Toast.makeText(getActivity(), "Usman", Toast.LENGTH_SHORT).show();
}
});
return view;
}
private void getClientFromSqlite() {
new AsyncTask<Void, Void, Void>() {
#Override
protected Void doInBackground(Void... params) {
listclients.clear();
listclients.addAll(databaseHelper.getAllOrderData());
// clientRecyclerAdapter.notifyDataSetChanged();
return null;
}
#Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
clientRecyclerAdapter.notifyDataSetChanged();
}
}.execute();
}
}
Here is my Fragment activity which contain Viewpager class client..
{
DatabaseHelper databaseHelper;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_fragment);
databaseHelper=new DatabaseHelper(this);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("Dynamic ERPMini");
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Clients"));
tabLayout.addTab(tabLayout.newTab().setText("Products"));
tabLayout.addTab(tabLayout.newTab().setText("Invoices"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = findViewById(R.id.pager);
final PagerAdapter adapter = new PagersAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
#Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
#Override
public void onTabUnselected(TabLayout.Tab tab) {
}
#Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
The New Error Crash Log by updating the code..
android.database.sqlite.SQLiteException: no such column: NAME (code 1): , while compiling: SELECT NAME, ORDERCODE, RETAIL, SUBCATAGARY, COMPANY FROM PRODUCTSRECORDS ORDER BY ORDERCODE ASC
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
at com.example.tablewithlist.DatabaseHelper.getAllOrderData(DatabaseHelper.java:175)
at com.example.tablewithlist.Clients$2.doInBackground(Clients.java:65)
at com.example.tablewithlist.Clients$2.doInBackground(Clients.java:61)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
Could you check the context received by DataBaseHelper constructor. May be it has NULL value.
Try this,
databaseHelper = new DatabaseHelper(getActivity());
For Second issue, You need to revisit to your table structure or query construction. Error log said there is no column named as "NAME" in table which is your querying table. Please check once again the basics.

Adding item in RecyclerView Fragment [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 5 years ago.
Improve this question
Apologies first of all because it is going to be a long question.
I am creating a to do list using 2 RecyclerViews in 2 fragments following is the code.
MainActivity.java
public class MainActivity extends AppCompatActivity {
/**
* The {#link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {#link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {#link android.support.v4.app.FragmentStatePagerAdapter}.
*/
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
private TaskDbHelper mHelper;
public Tab1 incompleteTasks;
public Tab2 completedTasks;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
try{
final EditText taskEditText = new EditText(MainActivity.this);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("Add a new task")
.setMessage("What do you want to do next?")
.setView(taskEditText)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
try{
mHelper = new TaskDbHelper(MainActivity.this);
String task = String.valueOf(taskEditText.getText());
mHelper.adddata(MainActivity.this, task);
//incompleteTasks.addTask(mHelper.getAddedTask("0").get(0));
incompleteTasks.updateUI();
}
catch(Exception ex1){
Toast.makeText(MainActivity.this, (String)ex1.getMessage(), Toast.LENGTH_LONG).show();
}
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}catch (Exception ex) {
Log.d("MainActivity", "Exception: " + ex.getMessage());
}
}
});
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A {#link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
#Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0:
//Tab1 incompleteTasks = new Tab1();
incompleteTasks = new Tab1();
incompleteTasks.setContext(MainActivity.this);
return incompleteTasks;
case 1:
//Tab2 completedTasks = new Tab2();
completedTasks = new Tab2();
completedTasks.setContext(MainActivity.this);
return completedTasks ;
default:
return null;
}
}
#Override
public int getItemPosition(Object object) {
// POSITION_NONE makes it possible to reload the PagerAdapter
return POSITION_NONE;
}
#Override
public int getCount() {
// Show 3 total pages.
return 2;
}
#Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Incomplete";
case 1:
return "Completed";
}
return null;
}
}
}
RecyclerAdapter.java
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.TaskHolder> {
private ArrayList<Task> mTasks;
private boolean completedStatus;
private Context contextFromTab;
private int lastPosition = -1;
private RecyclerViewAnimator mAnimator;
//1
public class TaskHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
//2
private TextView mTask_id;
private TextView mTask_title;
private TextView mTask_created_date;
private ImageButton mImageButtonDone;
private ImageButton mImageButtonUndo;
private ImageButton mImageButtonEdit;
private ImageButton mImageButtonDelete;
//3
//private static final String PHOTO_KEY = "PHOTO";
//4
public TaskHolder(View v) {
super(v);
try{
//v.geti
mTask_id = v.findViewById(R.id.task_id);
mTask_title = v.findViewById(R.id.task_title);
mTask_created_date = v.findViewById(R.id.task_created_date);
mImageButtonDone = v.findViewById(R.id.imageButtonDone);
mImageButtonUndo = v.findViewById(R.id.imageButtonUndo);
mImageButtonEdit = v.findViewById(R.id.imageButtonEdit);
mImageButtonDelete = v.findViewById(R.id.imageButtonDelete);
v.setOnClickListener(this);
mImageButtonDone.setOnClickListener(this);
mImageButtonUndo.setOnClickListener(this);
mImageButtonEdit.setOnClickListener(this);
mImageButtonDelete.setOnClickListener(this);
//v.setAnimation();
}
catch (Exception ex){
Log.d("TaskHolder", ex.getMessage());
}
}
//5
#Override
public void onClick(View v) {
if(v.equals(mImageButtonDone)){
View parent = (View) v.getParent();
TextView taskTextView = (TextView) parent.findViewById(R.id.task_id);
String _id = String.valueOf(taskTextView.getText());
TaskDbHelper mHelper = new TaskDbHelper(contextFromTab);
mHelper.changeTaskStatus(contextFromTab,true, _id);
removeAt(getAdapterPosition());
}
else if(v.equals(mImageButtonUndo)) {
View parent = (View) v.getParent();
TextView taskTextView = parent.findViewById(R.id.task_id);
String _id = String.valueOf(taskTextView.getText());
TaskDbHelper mHelper = new TaskDbHelper(contextFromTab);
mHelper.changeTaskStatus(contextFromTab,false, _id);
}
else if(v.equals(mImageButtonEdit)) {
View parent = (View) v.getParent();
TextView taskIdTextView = (TextView) parent.findViewById(R.id.task_id);
TextView taskTitleTextView = (TextView) parent.findViewById(R.id.task_title);
final String _id = String.valueOf(taskIdTextView.getText());
String _title = String.valueOf(taskTitleTextView.getText());
/*Intent intent = new Intent(this, TaskDetails.class);
intent.putExtra("_id", _id);
intent.putExtra("_title", _title);
startActivity(intent);*/
try{
final EditText taskEditText = new EditText(contextFromTab);
taskEditText.setText(_title);
AlertDialog dialog = new AlertDialog.Builder(contextFromTab)
.setTitle("Edit task")
.setView(taskEditText)
.setPositiveButton("Done", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
try{
TaskDbHelper mHelper = new TaskDbHelper(contextFromTab);
String task = String.valueOf(taskEditText.getText());
mHelper.editTask(contextFromTab, task, _id);
updateAt(getAdapterPosition(), _id);
/*Tab1 tab1 = new Tab1();
tab1.setContext(MainActivity.this);
tab1.updateUI();*/
}
catch(Exception ex1){
Toast.makeText(contextFromTab, (String)ex1.getMessage(), Toast.LENGTH_LONG).show();
}
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}catch (Exception ex) {
Log.d("MainActivity", "Exception: " + ex.getMessage());
}
}
else if(v.equals(mImageButtonDelete)) {
View parent = (View) v.getParent();
TextView taskTextView = (TextView) parent.findViewById(R.id.task_id);
String _id = String.valueOf(taskTextView.getText());
TaskDbHelper mHelper = new TaskDbHelper(contextFromTab);
mHelper.deleteTask(_id);
removeAt(getAdapterPosition());
}
Log.d("RecyclerView", "CLICK!");
}
public void bindTask(Task task, boolean completedStatus) {
try{
mTask_id.setText(Integer.toString(task._id) );
mTask_title.setText(task.title);
mTask_created_date.setText("created on: " + task.created_datetime);
if(completedStatus){
mImageButtonDone.setVisibility(View.INVISIBLE);
mImageButtonUndo.setVisibility(View.VISIBLE);
}else{
mImageButtonDone.setVisibility(View.VISIBLE);
mImageButtonUndo.setVisibility(View.INVISIBLE);
}
}
catch (Exception ex){
Log.d("bindTask", ex.getMessage());
}
}
public void addTask(Task task){
mTasks.add(0, task);
notifyItemInserted(0);
//smoothScrollToPosition(0);
}
public void removeAt(int position) {
mTasks.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());
}
public void updateAt(int position, String task_id){
//mTasks.
//mTasks.set(position);
try{
TaskDbHelper mHelper = new TaskDbHelper(contextFromTab);
Task updatedTask = mHelper.getTaskById(task_id);
mTasks.set(position, updatedTask);
notifyItemChanged(position);
}
catch (Exception ex){
}
}
}
public RecyclerAdapter(ArrayList<Task> tasks, boolean tasksCompletedStatus, Context context, RecyclerView recyclerView) {
mTasks = tasks;
completedStatus = tasksCompletedStatus;
contextFromTab = context;
mAnimator = new RecyclerViewAnimator(recyclerView);
}
#Override
public RecyclerAdapter.TaskHolder onCreateViewHolder(ViewGroup parent, int viewType) {
try{
View inflatedView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_todo, parent, false);
mAnimator.onCreateViewHolder(inflatedView);
return new TaskHolder(inflatedView);
}
catch(Exception ex){
Log.d("onCreateViewHolder", ex.getMessage());
return null;
}
}
private void setAnimation(View viewToAnimate, int position)
{
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition)
{
Animation animation = AnimationUtils.loadAnimation(contextFromTab, android.R.anim.slide_in_left);
animation.setDuration(3000);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
#Override
public void onBindViewHolder(RecyclerAdapter.TaskHolder holder, int position) {
try{
Task itemTask = mTasks.get(position);
holder.bindTask(itemTask, completedStatus);
mAnimator.onBindViewHolder(holder.itemView, position);
}
catch(Exception ex){
Log.d("onBindViewHolder", ex.getMessage());
}
}
#Override
public int getItemCount() {
try{
return mTasks.size();
}
catch(Exception ex){
Log.d("getItemCount", ex.getMessage());
return 0;
}
}
public ArrayList<Task> getListTasks(){
return mTasks;
}
}
TaskDBHelper.java
public class TaskDbHelper extends SQLiteOpenHelper{
// Table Name
public static final String TABLE_NAME = "tasks";
// Table columns
public static final String _ID = "_id";
public static final String COL_TASK_TITLE = "title";
public static final String COL_TASK_PARENT_ID = "parent_id";
public static final String COL_TASK_COMPLETED_STATUS = "completed_status";
public static final String COL_TASK_CREATED_DATETIME = "created_datetime";
public static final String COL_TASK_MODIFIED_DATETIME = "modified_datetime";
// Database Information
static final String DB_NAME = "com.sagarmhatre.simpletodo";
// database version
static final int DB_VERSION = 1;
public TaskDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
#Override
public void onCreate(SQLiteDatabase db) {
try {
String createTable = "CREATE TABLE " + TABLE_NAME + " ( " +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL_TASK_TITLE + " TEXT NOT NULL," +
COL_TASK_PARENT_ID + " INTEGER DEFAULT 0," +
COL_TASK_COMPLETED_STATUS + " BOOLEAN DEFAULT 0," +
COL_TASK_CREATED_DATETIME + " DATETIME DEFAULT (DATETIME(CURRENT_TIMESTAMP, 'LOCALTIME'))," +
COL_TASK_MODIFIED_DATETIME + " DATETIME" +");";
db.execSQL(createTable);
}
catch (Exception ex){
Log.d("TaskDbHelper", "Exception: " + ex.getMessage());
}
}
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
//Insert Value
public void adddata(Context context,String task_title) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_TASK_TITLE, task_title);
db.insert(TABLE_NAME, null, values);
db.close();
}
public Task adddataWithReturnTask(Context context,String task_title) {
try{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_TASK_TITLE, task_title);
db.insert(TABLE_NAME, null, values);
db.close();
ArrayList<Task> taskList = this.getAddedTask("0");
return taskList.get(0);
}
catch(Exception ex){
Log.d("MainActivity", "Exception: " + ex.getMessage());
return null;
}
}
//Delete Query
public void deleteTask(String id) {
String deleteQuery = "DELETE FROM " + TABLE_NAME + " where " + _ID + "= " + id ;
SQLiteDatabase db = this.getReadableDatabase();
db.execSQL(deleteQuery);
}
public void changeTaskStatus(Context context,Boolean taskStatus, String id) {
try{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
if(taskStatus)
values.put(COL_TASK_COMPLETED_STATUS, 1);
else
values.put(COL_TASK_COMPLETED_STATUS, 0);
db.update(TABLE_NAME, values, _ID + "=" + id, null);
db.close();
}
catch(Exception ex){
Log.d("changeTaskStatus() ", "Exception: " + ex.getMessage());
}
}
// Edit task - by me
public void editTask(Context context,String task_title, String id) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_TASK_TITLE, task_title);
db.update(TABLE_NAME, values, _ID + "=" + id, null);
db.close();
}
//Get Row Count
public int getCount() {
String countQuery = "SELECT * FROM " + TABLE_NAME;
int count = 0;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
if(cursor != null && !cursor.isClosed()){
count = cursor.getCount();
cursor.close();
}
return count;
}
//Get FavList
public ArrayList<Task> getTaskList(String ParentID, Boolean completedStatus){
try{
String selectQuery;
if(completedStatus){
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE "+ COL_TASK_PARENT_ID + "="+ParentID+ " AND " + COL_TASK_COMPLETED_STATUS + " = " + 1 + " ORDER BY " + _ID + " DESC";
}else{
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE "+ COL_TASK_PARENT_ID + "="+ParentID+ " AND " + COL_TASK_COMPLETED_STATUS + " = " + 0 + " ORDER BY " + _ID + " DESC";
}
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
ArrayList<Task> TaskList = new ArrayList<Task>();
if (cursor.moveToFirst()) {
do {
Task task = new Task();
task._id = Integer.parseInt(cursor.getString(cursor.getColumnIndex(_ID)));
task.title = cursor.getString(1);
task.parent_id = Integer.parseInt(cursor.getString(2));
task.completed_status = Boolean.parseBoolean(cursor .getString(3));
task.created_datetime = cursor.getString(4);
task.modified_datetime = cursor.getString(5);
TaskList.add(task);
} while (cursor.moveToNext());
}
return TaskList;
}
catch(Exception ex){
Log.d("getTaskList() ", "Exception: " + ex.getMessage());
return null;
}
}
public Task getTaskById(String _id){
try{
String selectQuery;
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE "+ _ID + "="+_id;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
ArrayList<Task> TaskList = new ArrayList<Task>();
if (cursor.moveToFirst()) {
do {
Task task = new Task();
task._id = Integer.parseInt(cursor.getString(cursor.getColumnIndex(_ID)));
task.title = cursor.getString(1);
task.parent_id = Integer.parseInt(cursor.getString(2));
task.completed_status = Boolean.parseBoolean(cursor .getString(3));
task.created_datetime = cursor.getString(4);
task.modified_datetime = cursor.getString(5);
TaskList.add(task);
} while (cursor.moveToNext());
}
return TaskList.get(0);
}
catch(Exception ex){
Log.d("getTaskList() ", "Exception: " + ex.getMessage());
return null;
}
}
public ArrayList<Task> getAddedTask(String ParentID){
try{
String selectQuery;
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE "+ COL_TASK_PARENT_ID + "="+ParentID+ " AND " + COL_TASK_COMPLETED_STATUS + " = " + 0 + " ORDER BY " + _ID + " DESC";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
ArrayList<Task> TaskList = new ArrayList<Task>();
if (cursor.moveToFirst()) {
do {
Task task = new Task();
task._id = Integer.parseInt(cursor.getString(cursor.getColumnIndex(_ID)));
task.title = cursor.getString(1);
task.parent_id = Integer.parseInt(cursor.getString(2));
task.completed_status = Boolean.parseBoolean(cursor .getString(3));
task.created_datetime = cursor.getString(4);
task.modified_datetime = cursor.getString(5);
TaskList.add(task);
} while (cursor.moveToNext());
}
return TaskList;
}
catch(Exception ex){
Log.d("getTaskList() ", "Exception: " + ex.getMessage());
return null;
}
}
}
Tab1.java
public class Tab1 extends Fragment {
private static final String TAG = "Tab1";
private TaskDbHelper mHelper;
//int listResourceID;
//ViewAdapter viewAdapter;
Context incompleteListContext;
Toolbar toolbar;
private RecyclerView mRecyclerView;
private LinearLayoutManager mLinearLayoutManager;
RecyclerAdapter adapter;
public void setContext(Context context){
this.incompleteListContext = context;
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1, container, false);
mRecyclerView = rootView.findViewById(R.id.list_todo);
mRecyclerView.setHasFixedSize(true);
//mRecyclerView.setItemAnimator(new SlideInLeftAnimator());
//SlideInUpAnimator animator = new SlideInUpAnimator(new OvershootInterpolator());
//mRecyclerView.setItemAnimator(animator);
mLinearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLinearLayoutManager);
updateUI();
return rootView;
}
//#Override
//public void onViewCreated(View rootView, Bundle savedInstanceState){
//incompleteList = rootView.findViewById(R.id.list_todo_completed);
//updateUI();
//}
public void updateUI() {
try {
mHelper = new TaskDbHelper(incompleteListContext);
ArrayList<Task> taskList = mHelper.getTaskList("0",false);
adapter = new RecyclerAdapter(taskList, false, incompleteListContext, mRecyclerView);
mRecyclerView.setAdapter(adapter);
}
catch (Exception ex) {
Log.d(TAG, "Exception: " + ex.getMessage());
}
}
public RecyclerView getRecyclerView(){
return mRecyclerView;
}
}
So far I am successful in implementing delete and update operation without reloading the whole list in Tab1. But after adding an item I want to add it to the top and I am unable to do it as seen in most of RecyclerView tutorials. SO currently I reload the whole list (which I Know is not appropriate).
Need a way to not load whole list and add item at the top of list.
Being new to android development, any kind of help is welcome.
It's a bit hard to read Your code -> Please don't mix camelcase pascalcase prefix and non-prefix naming for variable.
For adding item on the top try with (PSEUDO CODE):
items.add(0, ITEM_HERE);
adapter.notifyDataSetChanged();
recyclerView.smoothScrollToPosition(0);
This addTask method not working like You want?
public void addTask(Task task){
mTasks.add(0, task);
notifyItemInserted(0);
smoothScrollToPosition(0);
}

SQLITE DATABASE error in displaying data to listview

im getting problem in displaying my data from sqlite db
my apps stops working when run and display no errors.
please help me
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "ExpDatee.db";
public static final String TABLE_NAME = "EXPDATE_TABLE";
public static final String COL_1 = "PRO_ID";
public static final String COL_2 = "PRO_NAME";
public static final String COL_3 = "PRO_EXPDATE";
public static final String COL_4 = "PRO_DAYTILLEXP";
/**
private static final String SQL_CREATE_TABLE_EXPDATE = "CREATE TABLE " + TABLE_NAME + "("
+ PRO_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ PRO_NAME + " TEXT NOT NULL, "
+ PRO_EXPDATE+ " TEXT NOT NULL, "
+ PRO_DAYTILLEXP + " TEXT NOT NULL, "
+ ");";
**/
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
// SQLiteDatabase db = this.getWritableDatabase();
}
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(PRO_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
"PRO_NAME TEXT, " +
"PRO_EXPDATE TEXT," +
" PRO_DAYTILLEXP TEXT )");
}
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
//method to insert data
public boolean insertData(String PRO_NAME, String PRO_EXPDATE, String PRO_DAYTILLEXP)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2,PRO_NAME);
contentValues.put(COL_3,PRO_EXPDATE);
contentValues.put(COL_4,PRO_DAYTILLEXP);
Log.d(TAG, "ADD DATA : ADDING " + PRO_NAME + " TO " + TABLE_NAME);
Log.d(TAG, "ADD DATA : ADDING " + PRO_EXPDATE + " TO " + TABLE_NAME);
Log.d(TAG, "ADD DATA : ADDING " + PRO_DAYTILLEXP + " TO " + TABLE_NAME);
long result = db.insert(TABLE_NAME,null ,contentValues );
if (result == -1)
return false;
else
return true;
}
//get all data
public Cursor getData()
{
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM" + TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
DatabaseHelper myDB;
EditText etProductName, etDaysBeforeExp, etExpDate;
Button btnAddItem, btnViewItem;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDB = new DatabaseHelper(this);
etProductName = (EditText)findViewById(R.id.etProductName);
etDaysBeforeExp = (EditText)findViewById(R.id.etDaysBeforeExp);
etExpDate = (EditText)findViewById(R.id.etExpDate);
btnAddItem = (Button)findViewById(R.id.btnAddItem);
btnViewItem = (Button)findViewById(R.id.btnViewItem);
btnAddItem.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
String PRO_NAME = etProductName.getText().toString();
String PRO_EXPDATE = etExpDate.getText().toString();
String PRO_DAYTILLEXP = etDaysBeforeExp.getText().toString();
if(etProductName.length() !=0)
{
AddData(PRO_NAME,PRO_EXPDATE,PRO_DAYTILLEXP);
etProductName.setText("");
etExpDate.setText("");
etDaysBeforeExp.setText("");
}
else
{
toastMessage("PLEASE INSERT VALUE");
}
}
});
btnViewItem.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ListDataActivity.class);
startActivity(intent);
}
});
}
public void AddData(String PRO_NAME, String PRO_EXPDATE, String PRO_DAYTILLEXP)
{
boolean InsertData = myDB.insertData(PRO_NAME,PRO_EXPDATE,PRO_DAYTILLEXP);
if(InsertData)
{
toastMessage("DATA INSERTED");
}
else
{
toastMessage("DATA NOT INSERTED");
}
}
private void toastMessage(String message) {
Toast.makeText(this,message, Toast.LENGTH_LONG).show();
}
}
ListDataActivity.java
public class ListDataActivity extends AppCompatActivity {
DatabaseHelper myDB;
private ListView mListView;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_data);
populateListView();
}
private void populateListView() {
Cursor data = myDB.getData();
ArrayList<String> listData = new ArrayList<>();
while (data.moveToNext())
{
listData.add(data.getString(1));
listData.add(data.getString(2));
listData.add(data.getString(3));
}
ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
mListView.setAdapter(adapter);
}
private void toastMessage(String message) {
Toast.makeText(this,message, Toast.LENGTH_LONG).show();
}
}
Initialized Listdataactivity
myDB = new DatabaseHelper(this);
Use Arrayadapter
ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listData);
mListView.setAdapter(adapter);

can't get to show data from a database sqlite with a requirement JAVA ANDROID STUDIO

i can't get my data to show on my ListView. i created database handler with a query that says: "SELECT * FROM TABLE_NAME WHERE COLUMN_USERNAME = '"+Username+"'". i want to show Data that have the username i want only. But i cant seem to get it work. here is the code.
ViewEvent class with the List View
public class ViewEvent extends Activity {
private static String z = "";
private static final int _EDIT = 0, _DELETE = 1; // constants to be used later
static int longClickedItemIndex;
static List<Event> events = new ArrayList<Event>();
ArrayAdapter<Event> eventsAdapter;
ListView listViewEvents;
static DatabaseHandlerEvent helper;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_event);
Typeface myTypeFace = Typeface.createFromAsset(getAssets(), "Type Keys Filled.ttf");
TextView myTextview = (TextView) findViewById(R.id.textViewHead4);
myTextview.setTypeface(myTypeFace);
helper = new DatabaseHandlerEvent(getApplicationContext());
listViewEvents = (ListView) findViewById(R.id.listView);
registerForContextMenu(listViewEvents);
listViewEvents.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() {
#Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
longClickedItemIndex = position;
return false;
}
}
);
populateList();
SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Username = prfs.getString("Username", "");
if (helper.getEventCount() != 0 && events.size() == 0) {
events.addAll(helper.getAllEvent(Username));
}
}
public void registerForContextMenu(View view) {
view.setOnCreateContextMenuListener(this);
}
public void onButtonClick(View v){
if(v.getId() == R.id.bSignoutb){
Toast so = Toast.makeText(ViewEvent.this, "Signing out.. Redirecting to Login Page..." , Toast.LENGTH_SHORT);
so.show();
Intent i = new Intent(ViewEvent.this, MainActivity.class);
startActivity(i);
}
if(v.getId() == R.id.Bback){
Intent i = new Intent(ViewEvent.this, CreateEvent.class);
startActivity(i);
}
}
private void populateList() {
eventsAdapter = new eventListAdapter();
listViewEvents.setAdapter(eventsAdapter);
}
public class eventListAdapter extends ArrayAdapter<Event> {
public eventListAdapter() {
super(ViewEvent.this, R.layout.listview_event, events);
}
#Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = getLayoutInflater().inflate(R.layout.listview_event, parent, false);
}
Event currentEvent = events.get(position);
TextView name = (TextView) view.findViewById(R.id.textViewEventName);
name.setText(currentEvent.getName());
TextView location = (TextView) view.findViewById(R.id.textViewLocation);
location.setText(currentEvent.getLocation());
TextView date = (TextView) view.findViewById(R.id.textViewDate);
date.setText(currentEvent.getDate());
TextView description = (TextView) view.findViewById(R.id.textViewDescription);
description.setText(currentEvent.getDescription());
TextView time = (TextView) view.findViewById(R.id.textViewTime);
time.setText(currentEvent.getTime());
TextView testnia = (TextView) view.findViewById(R.id.testnia);
testnia.setText(currentEvent.getUsername());
return view;
}
}
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, view, menuInfo);
menu.setHeaderIcon(R.drawable.huhu);// find a suitable icon
menu.setHeaderTitle("Event options:");
menu.add(Menu.NONE, _EDIT, Menu.NONE, "Edit Event");
menu.add(Menu.NONE, _DELETE, Menu.NONE, "Delete Event");
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case _EDIT:
// editing a contact
Intent editContactIntent = new Intent(getApplicationContext(), EditEvent.class);
startActivityForResult(editContactIntent, 2); // reqcode=2
break;
case _DELETE:
helper.deleteEvent(events.get(longClickedItemIndex));
events.remove(longClickedItemIndex);
eventsAdapter.notifyDataSetChanged();
break;
}
return super.onContextItemSelected(item);
}
}
And this is my DataBaseHelperEvent class
public class DatabaseHandlerEvent extends SQLiteOpenHelper {
static DatabaseHelperUser helper;
Event event;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "Events";
private static final String TABLE_NAME = "Events";
private static final String COLUMN_ID = "id",
COLUMN_NAME = "name", COLUMN_LOCATION = "location", COLUMN_DATE = "date",
COLUMN_TIME ="time", COLUMN_DESCRIPTION = "description", COLUMN_USERNAME = "username";
SQLiteDatabase db;
public DatabaseHandlerEvent(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " + COLUMN_LOCATION + " TEXT, " +
COLUMN_DATE + " TEXT, " + COLUMN_TIME + " TEXT, " +
COLUMN_DESCRIPTION + " TEXT, " + COLUMN_USERNAME + " TEXT)"
);
}
public long createEvent (Event event) {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, event.getName());
values.put(COLUMN_LOCATION, event.getLocation());
values.put(COLUMN_DATE, event.getDate());
values.put(COLUMN_TIME, event.getTime());
values.put(COLUMN_DESCRIPTION, event.getDescription());
values.put(COLUMN_USERNAME, event.getUsername());
long result = db.insert(TABLE_NAME, null, values);
db.close();
return result;
}
public int updateEvent(Event event) {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, event.getName());
values.put(COLUMN_LOCATION, event.getLocation());
values.put(COLUMN_DATE, event.getDate());
values.put(COLUMN_TIME, event.getTime());
values.put(COLUMN_DESCRIPTION, event.getDescription());
int rowsAffected = db.update(TABLE_NAME, values, COLUMN_ID + "=?",
new String[]{String.valueOf(event.getId())});
db.close();
return rowsAffected;
}
public List<Event> getAllEvent(String Username) {
List<Event> events = new ArrayList<Event>();
db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME +" WHERE "+COLUMN_USERNAME+" = "+ "'"+Username+"'", null);
if (cursor.moveToFirst()) {
do {
events.add(new Event(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2),
cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6)));
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return events;
}
public int getEventCount() {
db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
int count = cursor.getCount();
cursor.close();
db.close();
return count;
}
public int deleteEvent(Event event) {
db = this.getWritableDatabase();
int rowsAffected = db.delete(TABLE_NAME, COLUMN_ID + "=?",
new String[]{String.valueOf(event.getId())});
db.close();
return rowsAffected;
}
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "DROP TABLE IF EXISTS "+TABLE_NAME;
db.execSQL(query);
this.onCreate(db);
}
}
So whenever i show my ListView, it will show nothing. How can i show the data that only have a specific username i want? thanks! Sorry for my bad english

Categories

Resources