vendredi 14 août 2015

Java Binder Error while working with Android and Existing SQLite Database

My database contain 5000 records I wanted to fetch those records in Cursor object.

Here my DBHelper.java

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;

    public class DBHelper extends SQLiteOpenHelper {

        private static String DB_NAME = "StudentDetails";
        private SQLiteDatabase db;
        private final Context context;
        private String DB_PATH;

        public DBHelper(Context context) {
            super(context, DB_NAME, null, 1);
            this.context = context;
            DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/";
        }

        public void createDataBase() throws IOException {

            boolean dbExist = checkDataBase();
            if (dbExist) {

            } else {
                this.getReadableDatabase();
                try {
                    copyDataBase();
                } catch (IOException e) {
                    throw new Error("Error copying database");
                }
            }
        }

        private boolean checkDataBase() {
            File dbFile = new File(DB_PATH + DB_NAME);
            return dbFile.exists();
        }

        private void copyDataBase() throws IOException {

            InputStream myInput = context.getAssets().open(DB_NAME);
            String outFileName = DB_PATH + DB_NAME;
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            // Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();

        }

        public Cursor getData() {
            String myPath = DB_PATH + DB_NAME;
            db = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
            Cursor c = db.rawQuery("SELECT * FROM Members where Phone='4085551212ll'",null);

        }
        public void getAllMembers()
        {
            Cursor c = getData();
            if(c == null)
            {
                Log.d("No data", "Cursornot initialized.....");
            }

            String name;
            c.moveToFirst();
            do {
                Log.d("Data", "Able to fetch ..........");
                name = c.getString(1);
                Log.d("Values",name);

            } while (c.moveToNext());
            c.close();
        }
        @Override
        public void onCreate(SQLiteDatabase arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
        }
}

My MainActivity.java

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

import java.io.IOException;


public class MainActivity extends ActionBarActivity {

    private Button button;
    private DBHelper databaseHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //R - Resource
        databaseHelper = new DBHelper(getApplicationContext());

        button  =(Button) findViewById(R.id.btnBless);

        databaseHelper = new DBHelper(this);
        try {
            databaseHelper.createDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public void onClick(View view)
    {
        databaseHelper.getAllMembers();

    }
}

As a layout I have only a Button. And in asset folder I have pasted my file StudentDetails.

Is .sqlite extension is important ? But I have tried in both case its not working getting exception on logcat. Java Binder Exception.

Aucun commentaire:

Enregistrer un commentaire