mardi 1 décembre 2015

SQLite database give error in android

Hi I'm trying to make a task with SQLite database in android.

The problem is it run without any error and without any warning, but when i tried to see the content comes from database the program stooped

I don't know why this error occurs. I tried several things but can't find any solution. help me please.

My DbCopy.java

package spurs.cafesoft.fragment;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DbCopy extends SQLiteOpenHelper{
private static String DB_PATH = "/data/data/spurs.spurs.cafesoft.fragment/databases/";

private static String DB_NAME = "studenttoolkit.db";

private SQLiteDatabase myDataBase;

private final Context myContext;

public DbCopy(Context context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
}

public void createDataBase() throws IOException {

    boolean dbExist = checkDataBase();

    if (dbExist) {

    } else {

        this.getReadableDatabase();

        try {

            copyDataBase();

        } catch (IOException e) {
            throw new Error("Error copying database");

        }
    }

}

/**
 * Check if the database already exist to avoid re-copying the file each
 * time you open the application.
 *
 * @return true if it exists, false if it doesn't
 */
private boolean checkDataBase() {

    SQLiteDatabase checkDB = null;

    try {
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READONLY);

    } catch (SQLiteException e) {

        // Log.d("myLog", "database does't exist yet.");

    }

    if (checkDB != null) {

        checkDB.close();

    }

    return checkDB != null ? true : false;
}


private void copyDataBase() throws IOException {

    InputStream myInput = myContext.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);
    }

    myOutput.flush();
    myOutput.close();
    myInput.close();

}

public void openDataBase() throws SQLException {

    String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null,
            SQLiteDatabase.OPEN_READONLY);

}

@Override
public synchronized void close() {

    if (myDataBase != null)
        myDataBase.close();

    super.close();

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

My Fragment_versity.java is

package spurs.cafesoft.fragment;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.SpannableString;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.io.IOException;
import java.util.ArrayList;

import spurs.cafesoft.studenttookit.R;

public class Fragment_versity  extends Fragment {

ListView listView;
ArrayList<String> dbList=new ArrayList<String>();

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.fragment_versity, container, false);


    ListView listView = (ListView) rootview.findViewById(R.id.vrstycontent);
    caliingDpCopy();
    getContent();
    listView.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,dbList));

    return rootview;
}
@SuppressLint("SdCardPath") private void getContent() {
    // TODO Auto-generated method stub
    String dbPath = "/data/data/spurs.cafesoft.fragment/databases/studenttoolkit.db";
    SQLiteDatabase myDatabase = null;

    try {
        myDatabase = SQLiteDatabase.openDatabase(dbPath, null,
                SQLiteDatabase.OPEN_READWRITE);
    } catch (Exception e) {

    }
    String sql = "SELECT description FROM virsity";

    Cursor c = null;
    try {
        c = myDatabase.rawQuery(sql, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        dbList.add(c.getString(c.getColumnIndex("description")));
    }

    myDatabase.close();

}

private void caliingDpCopy() {
    // TODO Auto-generated method stub
    DbCopy mydb = new DbCopy(getActivity());
    try {
        mydb.createDataBase();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
}

and finally my fragment_versity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://ift.tt/nIICcg"
android:background="#7f8c8d"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="100dp">

    <ImageView
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:id="@+id/imageView2"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/diulogo"/>
</RelativeLayout>

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/border_one">
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ListView
            android:id="@+id/vrstycontent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
    </RelativeLayout>
</ScrollView>
</LinearLayout>

my logcat shows this

77/spurs.cafesoft.studenttookit E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: spurs.cafesoft.studenttookit, PID: 4177
                                                                        java.lang.Error: Error copying database
                                                                            at spurs.cafesoft.fragment.DbCopy.createDataBase(DbCopy.java:48)
                                                                            at spurs.cafesoft.fragment.Fragment_versity.caliingDpCopy(Fragment_versity.java:91)
                                                                            at spurs.cafesoft.fragment.Fragment_versity.onCreateView(Fragment_versity.java:53)
                                                                            at android.app.Fragment.performCreateView(Fragment.java:2053)
                                                                            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)
                                                                            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                                            at android.app.BackStackRecord.run(BackStackRecord.java:834)
                                                                            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
                                                                            at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447)
                                                                            at android.os.Handler.handleCallback(Handler.java:739)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:135)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at java.lang.reflect.Method.invoke(Method.java:372)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Aucun commentaire:

Enregistrer un commentaire