As a newcomer to android development I've been stuck on this issue for a few weeks now and it's getting pretty tiring.
After looking at every tutorial and reading every question and answer I could find, still I can't figure out how to get Android Studio to just take what's in my SQLite database and paste its contents into a listview. I want to display ALL data from my database (All_wine.db) into my listview (listwine).My app is bulid normally with android studio, but the app crashed and unfortunately Myapplication
has stopped in nox.
Here is my code:
DatabaseHelper.java
package com.example.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "All_wine.db";
private static final String DB_TABLE = "All_wine_Table";
//columns
private static final String ID = "ID";
private static final String NAME ="NAME";
private static final String CREATE_TABLE ="CREATE TABLE "+DB_TABLE+" ("+
ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
NAME+ " TEXT "+ ")";
public DatabaseHelper(Context context) {
super(context,DB_NAME ,null,1);
}
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factoty, int version) {
super(context,DB_NAME ,null,1);
}
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factoty, int version, DatabaseErrorHandler errorHandler) {
super(context,DB_NAME ,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " +DB_TABLE + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT)");
db.execSQL("INSERT INTO " +DB_TABLE + "(NAME) VALUES ('Mοσχατο ελληνικο ')");
db.execSQL("INSERT INTO " +DB_TABLE + "(NAME) VALUES ('Vin Dux')");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i ,int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+ DB_TABLE);
onCreate(sqLiteDatabase);
}
public void insertinallwine(String namewine){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NAME,namewine);
sqLiteDatabase.insert(DB_TABLE,null,contentValues);
}
//create method to view data
public Cursor viewData(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "Select * from " + DB_TABLE;
Cursor cursor = db.rawQuery(query, null);
return cursor;
}
}
Home_Fragment.java
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import static com.facebook.FacebookSdk.getApplicationContext;
public class Home_Fragment extends Fragment {
DatabaseHelper db ;
ArrayList<String> listItem;
ArrayAdapter adapter;
ListView listwine;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_home, container, false);
// db = new DatabaseHelper(getActivity(),"All_wine.db",null,1);
db = new DatabaseHelper(getContext());
listItem=new ArrayList<>();
listwine=(ListView)getActivity().findViewById(R.id.wine_list);
db.insertinallwine("Samos Grand Cru");
viewData();
return view;
}
private void viewData(){
Cursor cursor=db.viewData();
if(cursor.getCount() == 0) {
Toast.makeText(getContext(),"No data to show",Toast.LENGTH_LONG).show();
}else{
while (cursor.moveToNext()){
listItem.add(cursor.getString(1)); //index 1 is name index 0 is id
}
}
adapter = new ArrayAdapter(getContext(),android.R.layout.simple_list_item_1,listItem);
listwine.setAdapter(adapter);
}
}
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/eoss_samou">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/wine_list"
tools:ignore="InvalidId"/>
</RelativeLayout>
I'm sure there is something really dumb I'm missing but any help would be appreciated.
I noticed something odd in your code. this could be the issue.
Your wine_list(ListView) is in your fragment but you are trying to access it from your activity.
Try replacing
listwine=(ListView)getActivity().findViewById(R.id.wine_list);
with
listwine=(ListView)view.findViewById(R.id.wine_list);