Autore Topic: Database locale__PROBLEMA LOGCAT  (Letto 436 volte)

Offline dicba

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD
  • Sistema operativo:
    Mac OS X 10.6.8
Database locale__PROBLEMA LOGCAT
« il: 28 Maggio 2013, 16:24:07 CEST »
0
Salve ragazzi ho un db locale e questo è il codice. Non capisco l'errore del LOGCAT..Potreste aiutarmi please??

Codice (Java): [Seleziona]
package it.polito.laroute1;

import java.util.ArrayList;
import java.util.HashSet;
import android.app.Application;
import android.database.Cursor;

public class GlobalBox extends Application {

        private ArrayList<Category> categoryList;
       
        /**
         * Restituisce la categoria alla posizione index della lista
         * @param index
         * @return String
         */

        public Category getCategoryByIndex(int index) {
                return categoryList.get(index);
        }

        /**
         * Restituisce il numero di categorie della lista
         * @return int
         */

        public int getCategoryCount() {
                return categoryList.size();
        }
       

        public int getRouteCountByCategory(int categoryIndex) {
                return categoryList.get(categoryIndex).getRouteList().size();
        }
       
        public Route getRouteInCategoryByIndex(int categoryIndex, int routeIndex) {
                return categoryList.get(categoryIndex).getRouteList().get(routeIndex);
        }
       
        public void readDB() {
                // Open the DB
                DBConnect dbc = new DBConnect(this, "laroute.sqlite");
               
                // Some useful things
                ArrayList<Route> routes = new ArrayList<Route>();
                ArrayList<String> categories = new ArrayList<String>();
                ArrayList<String> savedCategories = new ArrayList<String>();
                Route r = null;
               
                // Execute the query
                Cursor c = dbc.query("SELECT * FROM Routes");
                // Iterate all records getting by the query
                c.moveToFirst();
                do {
                        // Save the category column value
                        categories.add( c.getString(c.getColumnIndex("category")) );
                        // Save all other columns value
                        r = new Route(  c.getString(c.getColumnIndex("name")),
                                                        c.getString(c.getColumnIndex("city")),
                                                        c.getString(c.getColumnIndex("description")),
                                                        c.getString(c.getColumnIndex("image_path")),
                                                        Integer.parseInt(c.getString(c.getColumnIndex("interest rating"))),
                                                        Integer.parseInt(c.getString(c.getColumnIndex("time"))) );
                        routes.add(r);
                       
                } while(c.moveToNext());
               
                // Save a copy of the category list readed from db
                savedCategories = categories;
                // Remove duplicate from category list
                HashSet<String> hs = new HashSet();
                hs.addAll(categories);
                categories.clear();
                categories.addAll(hs);
               
                // Some useful things
                ArrayList<Route> rt = null;
               
                // Loop all ArrayList and put the data in the correct structur (categoryList)
                for (int j = 0; j < categories.size(); j++) {
                        rt = new ArrayList<Route>();
                        for (int i = 0; i < routes.size(); i++) {
                                if(savedCategories.get(i).compareTo(categories.get(j))==0) {
                                        rt.add(routes.get(i));
                                }
                        }
                        categoryList.add(new Category(categories.get(j), rt));
                }
               
        }
       
       
}

Questa è invece la classe che si connette al DB

Codice (Java): [Seleziona]
package it.polito.laroute1;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBConnect extends SQLiteOpenHelper {
       
        private static String DB_PATH;
        private static String DB_NAME;
        private SQLiteDatabase myDataBase;
        private final Context myContext;

        public DBConnect(Context context, String name) {
                super(context, name, null, 1);
               
                myContext = context;
                DB_PATH = "file:///android_asset/database/";
                DB_NAME = name;
                Log.d("DB Path", DB_PATH);
                myDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.OPEN_READONLY);
               
        }
       
        public Cursor query(String sql) {
                // Make a query on database
                //SQLiteDatabase db = this.getReadableDatabase();
                //Cursor cur = db.rawQuery(sql, new String[] {});
                Cursor cur = myDataBase.rawQuery(sql, new String[] {});
                return cur;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {       }

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

}


Codice: [Seleziona]
05-28 16:23:12.566: D/dalvikvm(689): Not late-enabling CheckJNI (already on)
05-28 16:23:13.896: E/Trace(689): error opening trace file: No such file or directory (2)
05-28 16:23:14.445: D/DB Path(689): file:///android_asset/database/
05-28 16:23:14.465: E/SQLiteLog(689): (14) cannot open file at line 30174 of [00bb9c9ce4]
05-28 16:23:14.476: E/SQLiteLog(689): (14) os_unix.c:30174: (2) open(//file:///android_asset/database/laroute.sqlite) -
05-28 16:23:14.495: E/SQLiteDatabase(689): Failed to open database 'file:///android_asset/database/laroute.sqlite'.
05-28 16:23:14.495: E/SQLiteDatabase(689): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at it.polito.laroute1.DBConnect.<init>(DBConnect.java:23)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at it.polito.laroute1.GlobalBox.readDB(GlobalBox.java:40)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at it.polito.laroute1.MainActivity.onCreate(MainActivity.java:26)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.Activity.performCreate(Activity.java:5008)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.os.Looper.loop(Looper.java:137)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at android.app.ActivityThread.main(ActivityThread.java:4745)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at java.lang.reflect.Method.invokeNative(Native Method)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at java.lang.reflect.Method.invoke(Method.java:511)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-28 16:23:14.495: E/SQLiteDatabase(689):         at dalvik.system.NativeStart.main(Native Method)
05-28 16:23:14.495: D/AndroidRuntime(689): Shutting down VM
05-28 16:23:14.506: W/dalvikvm(689): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
05-28 16:23:14.516: E/AndroidRuntime(689): FATAL EXCEPTION: main
05-28 16:23:14.516: E/AndroidRuntime(689): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.polito.laroute1/it.polito.laroute1.MainActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.os.Looper.loop(Looper.java:137)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread.main(ActivityThread.java:4745)
05-28 16:23:14.516: E/AndroidRuntime(689):         at java.lang.reflect.Method.invokeNative(Native Method)
05-28 16:23:14.516: E/AndroidRuntime(689):         at java.lang.reflect.Method.invoke(Method.java:511)
05-28 16:23:14.516: E/AndroidRuntime(689):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-28 16:23:14.516: E/AndroidRuntime(689):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-28 16:23:14.516: E/AndroidRuntime(689):         at dalvik.system.NativeStart.main(Native Method)
05-28 16:23:14.516: E/AndroidRuntime(689): Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
05-28 16:23:14.516: E/AndroidRuntime(689):         at it.polito.laroute1.DBConnect.<init>(DBConnect.java:23)
05-28 16:23:14.516: E/AndroidRuntime(689):         at it.polito.laroute1.GlobalBox.readDB(GlobalBox.java:40)
05-28 16:23:14.516: E/AndroidRuntime(689):         at it.polito.laroute1.MainActivity.onCreate(MainActivity.java:26)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.Activity.performCreate(Activity.java:5008)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-28 16:23:14.516: E/AndroidRuntime(689):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-28 16:23:14.516: E/AndroidRuntime(689):         ... 11 more

Post unito: 30 Maggio 2013, 00:37:57 CEST
Ciao ragazzi da quanto ho capito il problema del logcat è questo:


05-30 00:20:33.242: E/AndroidRuntime(735):    at it.polito.laroute1.DBConnect.<init>(DBConnect.java:23)
05-30 00:20:33.242: E/AndroidRuntime(735):    at it.polito.laroute1.GlobalBox.readDB(GlobalBox.java:40)
05-30 00:20:33.242: E/AndroidRuntime(735):    at it.polito.laroute1.MainActivity.onCreate(MainActivity.java:26)

con il riferimento a questa specifica riga della classe DBConnect:
Codice (Java): [Seleziona]
myDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.OPEN_READONLY);
               

il secondo errore logcat rispetto a questa riga della classe GlboalBox

Codice (Java): [Seleziona]
DBConnect dbc = new DBConnect(this, "laroute.sqlite");
ed ultimo errore del logcat rispetto a questa riga
Codice (Java): [Seleziona]
globalBox.readDB();
nella mia mainactivity che inserisco qui sotto

Codice (Java): [Seleziona]
package it.polito.laroute1;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class MainActivity extends Activity {
       
        private GlobalBox globalBox;
        private ExpandableListAdapter mAdapter;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                // Get the unique application of the app
                globalBox = (GlobalBox) getApplicationContext();
                // Read database and load the data in my ArrayList Structure
                globalBox.readDB();
               
                ExpandableListView mainList = (ExpandableListView) findViewById(R.id.main_list);
                mainList.setAdapter(mAdapter);
               
                mAdapter = new BaseExpandableListAdapter() {
               
                        @Override
                        public boolean isChildSelectable(int groupPosition, int childPosition) { return false; }
                       
                        @Override
                        public boolean hasStableIds() { return false; }
                       
                        @Override
                        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
                               
                                String categoryName = globalBox.getCategoryByIndex(groupPosition).getName();
                                TextView label = (TextView) findViewById(R.id.item_label);
                                label.setText(categoryName);
                               
                                return label;
                        }
                       
                        @Override
                        public long getGroupId(int groupPosition) {
                                return groupPosition;
                        }
                       
                        @Override
                        public int getGroupCount() {
                                return globalBox.getCategoryCount();
                        }
                       
                        @Override
                        public Object getGroup(int groupPosition) {
                                return globalBox.getCategoryByIndex(groupPosition);
                        }
                       
                        @Override
                        public int getChildrenCount(int groupPosition) {
                                return globalBox.getRouteCountByCategory(groupPosition);
                        }
                       
                        @Override
                        public View getChildView(int groupPosition, int childPosition,
                                        boolean isLastChild, View convertView, ViewGroup parent) {
                       
                                String routeName = globalBox.getRouteInCategoryByIndex(groupPosition, childPosition).getName();
                                TextView label = (TextView) findViewById(R.id.item_label);
                                label.setText(routeName);
                               
                                return label;
                        }
                       
                        @Override
                        public long getChildId(int groupPosition, int childPosition) {
                                return childPosition;
                        }
                       
                        @Override
                        public Object getChild(int groupPosition, int childPosition) {
                                return globalBox.getRouteInCategoryByIndex(groupPosition, childPosition);
                        }
                };
               
        }      
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

Non riesco a uscirne fuori. Sapete di cosa si potrebbe trattare??
« Ultima modifica: 30 Maggio 2013, 00:37:57 CEST da dicba, Reason: Merged DoublePost »