Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
1

SQLite

17.02.2016, 16:38. Просмотров 568. Ответов 18
Метки нет (Все метки)

Возвращаясь к старой теме, вернусь к проблеме.
По рекомендации попробовал сделать от сюда
Тут отправляем данные для записи в бд
Java
1
2
3
4
obj = jsonArray.getJSONObject(i);
                            String text = obj.getString("text");
                            String title = obj.getString("title");
                            db.Insertdb(text, title);
Далее
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
public class DBHelper extends SQLiteOpenHelper{
 
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "newsDb";
    public static final String TABLE_CONTACTS = "news";
 
    public static final String KEY_ID = "_id";
    public static final String KEY_TITLE = "title";
    public static final String KEY_TEXT = "text";
 
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID
                + " integer primary key," + KEY_TITLE + " text," + KEY_TEXT + " text" + ")");
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_CONTACTS);
        onCreate(db);
    }
}
Тут принимаем данные и пытаемся записать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Testdb extends AppCompatActivity {
 
    DBHelper dbHelper;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        dbHelper = new DBHelper(this);
    }
 
    public void Insertdb(String text, String title)
    {
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(DBHelper.KEY_TEXT, text);
        contentValues.put(DBHelper.KEY_TITLE, title);
        database.insert(DBHelper.TABLE_CONTACTS, null, contentValues);
        dbHelper.close();
    }
 
 
}
И постоянно ругается на SQLiteDatabase database = dbHelper.getWritableDatabase();
И сами ошибки
E/AsyncHttpRH: User-space exception detected!
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase com.diplom.myapplication.DBHelper.getWritableDatabase()' on a null object reference
at com.diplom.myapplication.Testdb.Insertdb(Testdb.java:22)
at com.diplom.myapplication.jsontet$1.onSuccess(jsontet.java:70)
at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:351)
at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5223)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

И вторая
FATAL EXCEPTION: main
Process: com.diplom.myapplication, PID: 12675
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase com.diplom.myapplication.DBHelper.getWritableDatabase()' on a null object reference
at com.loopj.android.http.AsyncHttpResponseHandler.onUserException(AsyncHttpResponseHandler.java:304)
at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:395)
at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5223)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase com.diplom.myapplication.DBHelper.getWritableDatabase()' on a null object reference
at com.diplom.myapplication.Testdb.Insertdb(Testdb.java:22)
at com.diplom.myapplication.jsontet$1.onSuccess(jsontet.java:70)
at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:351)
at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510)*
at android.os.Handler.dispatchMessage(Handler.java:102)*
at android.os.Looper.loop(Looper.java:135)*
at android.app.ActivityThread.main(ActivityThread.java:5223)*
at java.lang.reflect.Method.invoke(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:372)

Добавлено через 7 минут
Не понимаю в чем проблема, подскажите пожалуйста, уже замучился с этой бд
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 16:38
Ответы с готовыми решениями:

SQLite
Приложение вылетает с ошибкой, не подскажете, в чём проблема? public class...

SQLite
почему id = 0 ??? public void onClick(View view) { dataBase = new...

SQLite
Мне не подскажите где можно взять хорошие примеры по SQlite.

SQLite
Создаю простенькую таблицу. db.execSQL("create table " + DATABASE_TABLE_NAME +...

SQLite и умножения
как видите на картинке есть несколько EditText. SQLite создает-заполняет...

18
_Night_Scream_
81 / 78 / 11
Регистрация: 08.08.2013
Сообщений: 647
17.02.2016, 16:45 2
qdhtnsoyndtr, пальцем в небо.
Расширение не пробовали базе .db поставить.
Врятли это решит, но вдруг.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:15 3
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase
Видимо в строке
Java
1
SQLiteDatabase database = dbHelper.getWritableDatabase();
dbHelper = null. Где вообще этот метод вызывается?
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:24  [ТС] 4
Spelcrawler, ниже в insert
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:26 5
qdhtnsoyndtr, я имел ввиду метод public void Insertdb(String text, String title). Он где вызывается?
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:31  [ТС] 6
Spelcrawler, Он в классе
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
public class jsontet extends Activity {
public void invoke() {
        AsyncHttpClient client = new AsyncHttpClient();
        client.get("http://***.ddns.net:8080/get", new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] response) {
                try {
                    jsonArray = new JSONArray(new String(response));
                    JSONObject obj;
 
                    for (int i = 0; i < jsonArray.length(); i++)
                    {
 
                        try {
                            obj = jsonArray.getJSONObject(i);
                            String text = obj.getString("text");
                            String title = obj.getString("title");
                            db.Insertdb(text, title);
 
                            textView.setText(obj.getString("title"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
 
                    }
 
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
 
            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
                // called when response HTTP status is "4XX" (eg. 401, 403, 404)
            }
 
        });
 
    }
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:35 7
qdhtnsoyndtr, А что такое db? В строке
Java
1
db.Insertdb(text, title);
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:39  [ТС] 8
Spelcrawler, ну я указал в начале сам класс и все что с ним связано в 3-м файле. больше там ничего нет с бд. Я так предполагал что он
Java
1
SQLiteDatabase database = dbHelper.getWritableDatabase();
тут и вызывается
0
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
17.02.2016, 17:41 9
db.Insertdb(text, title);

db это активити, оно вообще создано что ты на нем вызываешь методы?
там чтобы инициализовалось поле dbHelper должен отработать onCreate()

ужас
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:41 10
qdhtnsoyndtr, дак все же что за db? Откуда оно там взялось? Это каким-то образом полученный экземпляр активити Testdb?
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:42  [ТС] 11
Паблито,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class jsontet extends Activity {
 
    private TextView textView;
    private TextView textView2;
    private TextView textView3;
    JSONArray jsonArray;
 
    Testdb db = new Testdb();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);
        textView = (TextView) findViewById(R.id.textView);
        textView2 = (TextView) findViewById(R.id.textView2);
        textView3 = (TextView) findViewById(R.id.textView3);
        invoke();
    }
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:42 12
Цитата Сообщение от Паблито Посмотреть сообщение
db это активити
Я вот тоже так подумал, но откуда оно в другой активити не понятно.
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:44  [ТС] 13
db это указваю класс Testdb в котором и отрабатывает public void Insertdb(String text, String title)
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:44 14
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Testdb db = new Testdb();
Ну ок, а метод onCreate() то не отработал - и там dbHelper = null, как я и сказал в первом сообщении. Вообще так делать нельзя особенно руками создавать экземпляры активити.
0
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
17.02.2016, 17:44 15
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Testdb db = new Testdb();
зачем этот метод insert вообще там находится?
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:46  [ТС] 16
Паблито, Для удобства, пока разделил
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
17.02.2016, 17:46 17
Цитата Сообщение от Паблито Посмотреть сообщение
зачем этот метод insert вообще там находится?
Видимо были проблемы с контекстом и такой способ показался подходящим)
0
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
17.02.2016, 17:50 18
надо начать с того, что вытереть строку с созданием активити вручную, а потом думать где подходящее место для этого метода
0
qdhtnsoyndtr
6 / 6 / 1
Регистрация: 29.11.2013
Сообщений: 492
17.02.2016, 17:51  [ТС] 19
Все проблема решена.
Перемести метод insert в класс jsontet
0
17.02.2016, 17:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 17:51

Зашифровать Sqlite
Привет. Приложение активно работает со своей базой, хранит много данных. Я...

Картинка в SQLite
Всем привет! В программе используется SQLite БД. Заполняю ListView из нее,...

JSON в SQLite
Подскажите, как правильно передать данные для записи в базу. В этом методе...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru