Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
torooty
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 17
#1

Android, готовая база sql - Android

19.06.2013, 14:23. Просмотров 1060. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
Очень нужна помощь!!!
Проблема следующая.Есть готовая база. Столбец с именами отображается в listview, при выборе элемента из списка нужно, чтобы открылась информация из другого столбца в textview. Пишет ошибку, догадываюсь, что ошибка в DataActivity, но не могу понять, что и как нужно поправить.
Буду признателен если кто нибудь подскажет.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
public class ExternalDbOpenHelper extends SQLiteOpenHelper {
 
    //Путь к папке с базами на устройстве
    public static String DB_PATH;
    //Имя файла с базой
    public static String DB_NAME;
    public SQLiteDatabase database;
    public final Context context;
    
    public SQLiteDatabase getDb() {
        return database;
    }
 
    public ExternalDbOpenHelper(Context context, String databaseName) {
        super(context, databaseName, null, 1);
        this.context = context;
        //Составим полный путь к базам для вашего приложения
        String packageName = context.getPackageName();
        DB_PATH = String.format("//data//data//%s//databases//", packageName);
        DB_NAME = databaseName;
        openDataBase();
    }
 
    //Создаст базу, если она не создана
    public void createDataBase() {
        boolean dbExist = checkDataBase();
        if (!dbExist) {
            this.getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), "Copying error");
                throw new Error("Error copying database!");
            }
        } else {
            Log.i(this.getClass().toString(), "Database already exists");
        }
    }
    //Проверка существования базы данных
    private boolean checkDataBase() {
        SQLiteDatabase checkDb = null;
        try {
            String path = DB_PATH + DB_NAME;
            checkDb = SQLiteDatabase.openDatabase(path, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLException e) {
            Log.e(this.getClass().toString(), "Error while checking db");
        }
        //Ардроид не любит утечки ресурсов, все должно закрываться
        if (checkDb != null) {
            checkDb.close();
        }
        return checkDb != null;
    }
    //Метод копирования базы
    private void copyDataBase() throws IOException {
        // Открываем поток для чтения из уже созданной нами БД
        //источник в assets
        InputStream externalDbStream = context.getAssets().open(DB_NAME);
 
        // Путь к уже созданной пустой базе в андроиде
        String outFileName = DB_PATH + DB_NAME;
 
        // Теперь создадим поток для записи в эту БД побайтно
        OutputStream localDbStream = new FileOutputStream(outFileName);
 
        // Собственно копирование
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = externalDbStream.read(buffer)) > 0) {
            localDbStream.write(buffer, 0, bytesRead);
        }
        // Мы будем хорошими мальчиками(девочками) и закроем потоки
        localDbStream.close();
        externalDbStream.close();
 
    }
 
    public SQLiteDatabase openDataBase() throws SQLException {
        String path = DB_PATH + DB_NAME;
        if (database == null) {
            createDataBase();
            database = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
        }
        return database;
    }
    @Override
    public synchronized void close() {
        if (database != null) {
            database.close();
        }
        super.close();
    }
    @Override
    public void onCreate(SQLiteDatabase db) {}
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
 
    
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.example.base;
 
import java.util.ArrayList;
import java.util.IdentityHashMap;
 
import com.example.base.R;
import com.example.base.R.id;
 
 
import db.dbhelper.ExternalDbOpenHelper;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
 
 
public class MainActivity extends ListActivity {
    private static final String DB_NAME = "sasha.db3";
    //Хорошей практикой является задание имен полей БД константами
    private static final String TABLE_NAME = "names";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_NAME = "name";
    
     protected ListAdapter adapter;
    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList friends;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //Все, база открыта!
        fillFreinds();
        setUpList();
    }
 
private void setUpList() {
    //Используем стандартный адаптер и layout элемента для краткости
    setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, friends));
    listView = getListView();
 
 
}
 
//Извлечение элементов из базы данных
private void fillFreinds() {
    friends = new ArrayList<String>();
    Cursor friendCursor = database.query(TABLE_NAME,
                                             new String[] {FRIEND_ID, FRIEND_NAME},
                         null, null,null,null,FRIEND_NAME);
        friendCursor.moveToFirst();
        if(!friendCursor.isAfterLast()) {
            do {
                
                                
                String name = friendCursor.getString(1);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
}
        
        public void onListItemClick(ListView parent, View view, int position, long id) {
            Intent intent = new Intent(this, DataActivity.class);
            Cursor cursor = (Cursor) adapter.getItem(position);
            intent.putExtra("PEPAK_ID", cursor.getInt(cursor.getColumnIndex("_id")));
            startActivity(intent);
        }

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import com.example.base.R;
import db.dbhelper.ExternalDbOpenHelper;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.TextView;
 
 
 
public class DataActivity extends Activity {
    private static final String DB_NAME = "sasha.db3";
    //Хорошей практикой является задание имен полей БД константами
    private static final String TABLE_NAME = "namesl";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_ALL = "all";
    protected ListAdapter adapter;
    private SQLiteDatabase database;
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        long id = getIntent().getLongExtra("_id",-6);
        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //Все, база открыта!
        Cursor c = database.query(TABLE_NAME, new String[] {FRIEND_ID, FRIEND_ALL},
                                    null, null,null,null,FRIEND_ALL);
        TextView lv = (TextView) findViewById(R.id.text1);
       
        //выводим все в текствьюхи
        if (c.moveToFirst()) {
           
            lv.setText(c.getString(c.getColumnIndex(FRIEND_ALL)));
        }
        dbOpenHelper.close();
       database.close();
        
}
        
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2013, 14:23     Android, готовая база sql
Посмотрите здесь:

Android+ms sql 2008 R2 Android
Android Удалённая база данных MySQL, php, android
Android База данных Android из Eclipse
База данных! Android
База данных! Android
База данных Android
Общая база для android и ios. Реализация сервера на php Android
Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее? Android
Android Удаленная база данных для Android
Как подключить SQL server к android studio? Android
База данных в Android приложении Android
Android Где в проекте Android Studio лучше добавлять элементы в БД SQL?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
19.06.2013, 19:31     Android, готовая база sql #2
Цитата Сообщение от torooty Посмотреть сообщение
Пишет ошибку
какую?
torooty
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 17
20.06.2013, 09:35  [ТС]     Android, готовая база sql #3
уже после загрузки приложения, когда выбираю элемент, соответственно должен быть переход на DataActivity, но как раз в ней ,я думаю , есть ошибка и приложение вылетает. Или intent не правильно передаю, или не правильный layout. На всякий случай их тоже покажу.
Это для MainActivity
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="hello"
    />
    
 <ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    </ListView>
</LinearLayout>
Это для DataActivity
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 <ListView 
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    </ListView>
</LinearLayout>
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.06.2013, 10:15     Android, готовая база sql #4
так с какой ошибкой вылетает?
torooty
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 17
20.06.2013, 10:28  [ТС]     Android, готовая база sql #5
“The application has stopped unexpectedly. Pleast try again ”

в логах
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
06-20 06:27:00.241: I/class db.dbhelper.ExternalDbOpenHelper(433): Database already exists
06-20 06:27:05.761: D/AndroidRuntime(433): Shutting down VM
06-20 06:27:05.761: W/dalvikvm(433): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-20 06:27:05.781: E/AndroidRuntime(433): FATAL EXCEPTION: main
06-20 06:27:05.781: E/AndroidRuntime(433): java.lang.NullPointerException
06-20 06:27:05.781: E/AndroidRuntime(433):  at com.example.base.MainActivity.onListItemClick(MainActivity.java:253)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.app.ListActivity$2.onItemClick(ListActivity.java:321)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.widget.ListView.performItemClick(ListView.java:3382)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.os.Handler.handleCallback(Handler.java:587)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.os.Looper.loop(Looper.java:123)
06-20 06:27:05.781: E/AndroidRuntime(433):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-20 06:27:05.781: E/AndroidRuntime(433):  at java.lang.reflect.Method.invokeNative(Native Method)
06-20 06:27:05.781: E/AndroidRuntime(433):  at java.lang.reflect.Method.invoke(Method.java:521)
06-20 06:27:05.781: E/AndroidRuntime(433):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-20 06:27:05.781: E/AndroidRuntime(433):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-20 06:27:05.781: E/AndroidRuntime(433):  at dalvik.system.NativeStart.main(Native Method)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.06.2013, 12:58     Android, готовая база sql #6
Цитата Сообщение от torooty Посмотреть сообщение
NullPointerException
at com.example.base.MainActivity.onListItemClick(MainActivity.java:253)
действуйте....
Yandex
Объявления
20.06.2013, 12:58     Android, готовая база sql
Ответ Создать тему
Опции темы

Текущее время: 04:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru