'Problem in listview, sqlite database in asset folder

App is abruptly crashing please help

package com.hss.raagmalahcm.database;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.hss.raagmalahcm.allragasview.modelforallview;

import java.util.ArrayList;

public class MyDBHandler extends SQLiteOpenHelper {
    public static String DBNAME;
    public static String TABLE_NAME;
    public static final String DATABASE_LOC ="/data/data"+DBAccess.context.getPackageName()+"/databases/";
    private Context mcontext;
    private SQLiteDatabase mDatabase;

    public MyDBHandler(Context context, String DBname) {
        super(context, DBNAME, null, 1);
        DBNAME = DBname+".db";
        TABLE_NAME = "RaagDetails";
        mcontext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
//
    }
    public void OpenDatabase(){
        String DBPath = mcontext.getDatabasePath(DBNAME).getPath();
        if(mDatabase!=null && mDatabase.isOpen()){
            return;
        }
        mDatabase=SQLiteDatabase.openDatabase(DBPath,null,SQLiteDatabase.OPEN_READWRITE);
    }
    public void CloseDatabase(){
        if(mDatabase!=null){
            mDatabase.close();
        }
    }
    public ArrayList<modelforallview> getAllRagas()
    {
        modelforallview mfav = null;
        ArrayList<modelforallview> modelforallviewArrayList = new ArrayList<modelforallview>();
        OpenDatabase();
        Cursor cursor = mDatabase.rawQuery("select * from"+TABLE_NAME,null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast()){
            mfav = new modelforallview(cursor.getString(1));
            modelforallviewArrayList.add(mfav);
        }
        cursor.close();
        CloseDatabase();
        return modelforallviewArrayList;
    }
}

DBAccess.java This is Dabatase inflator creating class

package com.hss.raagmalahcm.database;

import android.app.Application;
import android.content.Context;
import android.view.LayoutInflater;

public class DBAccess extends Application {
    public static LayoutInflater inflater;
    //@SuppressLint("StaticFieldLeak")
    public static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        //context.getApplicationContext();
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }
}

modelforallview.java

model for layout resource file

package com.hss.raagmalahcm.allragasview;

public class modelforallview {
    public String RaagName;

    public String getRaagName() {
        return RaagName;
    }

    public void setRaagName(String raagName) {
        RaagName = raagName;
    }

    public modelforallview(String raagName) {
        RaagName = raagName;
    }

}

adapterforallview.java

this is adapter class for adapting data from db

package com.hss.raagmalahcm.allragasview;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.hss.raagmalahcm.R;
import com.hss.raagmalahcm.database.DBAccess;

import java.util.ArrayList;

public class adapterforallview extends ArrayAdapter<modelforallview> {

    public adapterforallview(ArrayList<modelforallview> array) {
        super(DBAccess.context, R.layout.alltemplate,array);
    }
    public static class ViewHolder {
        public TextView allraagview;


        public ViewHolder(View view) {
            allraagview = view.findViewById(R.id.raagnamefetch);
        }

        public void fill(final ArrayAdapter<modelforallview> adapter, final modelforallview item, final int position) {
            allraagview.setText(item.getRaagName());

        }
    }
    @Override
    public View getView(int position, View convertview, ViewGroup parent){
        ViewHolder holder;
        modelforallview item = getItem(position);
        if(convertview== null){
            convertview= DBAccess.inflater.inflate(R.layout.alltemplate,parent,false);
            holder = new ViewHolder(convertview);
            convertview.setTag(holder);
        }
        else{
            holder = (ViewHolder) convertview.getTag();
        }
        holder.fill(this, item,position);
        return convertview;
    }
}

AllRagas.java

I have to print it heree

package com.hss.raagmalahcm.allragasview;

import android.content.Context;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import com.hss.raagmalahcm.R;
import com.hss.raagmalahcm.database.MyDBHandler;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

public class AllRagas extends AppCompatActivity {
    ArrayList<modelforallview> modelforallviewArrayList  = new ArrayList<modelforallview>();
    ArrayAdapter adapter;

    // DBAccess db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_all_ragas);


        ListView listallrag = findViewById(R.id.allragaslist);

        MyDBHandler myDBHandler=new MyDBHandler(AllRagas.this, "RaagDB");
        File database = getApplicationContext().getDatabasePath(MyDBHandler.DBNAME);

        if(database.exists()==false){
            myDBHandler.getReadableDatabase();
            if(!copydatabase(AllRagas.this)){
                return;
            }
        }
        //here
        modelforallviewArrayList = myDBHandler .getAllRagas();
        adapter = new adapterforallview(modelforallviewArrayList);
        adapter.notifyDataSetChanged();
        listallrag.setAdapter(adapter);
    }

    public Boolean copydatabase(Context context){
        try {
            InputStream inputStream = context.getAssets().open(MyDBHandler.DBNAME);
            String OutFileName = MyDBHandler.DATABASE_LOC+MyDBHandler.DBNAME;
            File f = new File(OutFileName);
            f.getParentFile().mkdir();
            OutputStream outputStream = new FileOutputStream(OutFileName);

            byte[] buffer =  new byte[1024];
            int length = 0;
            while((length = inputStream.read(buffer))>0){
                outputStream.write(buffer, 0,length);
            }
            outputStream.flush();
            outputStream.close();
            return true;
        }catch (IOException e){
            return false;
        }

    }

}

I have created this by using a youtube link but i am confused why my app is not working



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source