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

SQLite - Android

Восстановить пароль Регистрация
 
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 16:38     SQLite #1
Возвращаясь к старой теме, вернусь к проблеме.
По рекомендации попробовал сделать от сюда
Тут отправляем данные для записи в бд
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 минут
Не понимаю в чем проблема, подскажите пожалуйста, уже замучился с этой бд
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 16:38     SQLite
Посмотрите здесь:

Android SQLite запрос
Android SQLite и умножения
ListView и SQLite Android
Android и sqlite Android
ID в SQLite генерятся не с 0 а с 1; Android
CursorLoader+SQLite Android
Android Глюк SQLite?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Night_Scream_
55 / 55 / 6
Регистрация: 08.08.2013
Сообщений: 513
17.02.2016, 16:45     SQLite #2
qdhtnsoyndtr, пальцем в небо.
Расширение не пробовали базе .db поставить.
Врятли это решит, но вдруг.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:15     SQLite #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. Где вообще этот метод вызывается?
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:24  [ТС]     SQLite #4
Spelcrawler, ниже в insert
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:26     SQLite #5
qdhtnsoyndtr, я имел ввиду метод public void Insertdb(String text, String title). Он где вызывается?
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:31  [ТС]     SQLite #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)
            }
 
        });
 
    }
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:35     SQLite #7
qdhtnsoyndtr, А что такое db? В строке
Java
1
db.Insertdb(text, title);
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:39  [ТС]     SQLite #8
Spelcrawler, ну я указал в начале сам класс и все что с ним связано в 3-м файле. больше там ничего нет с бд. Я так предполагал что он
Java
1
SQLiteDatabase database = dbHelper.getWritableDatabase();
тут и вызывается
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
17.02.2016, 17:41     SQLite #9
db.Insertdb(text, title);

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

ужас
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:41     SQLite #10
qdhtnsoyndtr, дак все же что за db? Откуда оно там взялось? Это каким-то образом полученный экземпляр активити Testdb?
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:42  [ТС]     SQLite #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();
    }
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:42     SQLite #12
Цитата Сообщение от Паблито Посмотреть сообщение
db это активити
Я вот тоже так подумал, но откуда оно в другой активити не понятно.
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:44  [ТС]     SQLite #13
db это указваю класс Testdb в котором и отрабатывает public void Insertdb(String text, String title)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:44     SQLite #14
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Testdb db = new Testdb();
Ну ок, а метод onCreate() то не отработал - и там dbHelper = null, как я и сказал в первом сообщении. Вообще так делать нельзя особенно руками создавать экземпляры активити.
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
17.02.2016, 17:44     SQLite #15
Цитата Сообщение от qdhtnsoyndtr Посмотреть сообщение
Testdb db = new Testdb();
зачем этот метод insert вообще там находится?
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:46  [ТС]     SQLite #16
Паблито, Для удобства, пока разделил
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.02.2016, 17:46     SQLite #17
Цитата Сообщение от Паблито Посмотреть сообщение
зачем этот метод insert вообще там находится?
Видимо были проблемы с контекстом и такой способ показался подходящим)
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
17.02.2016, 17:50     SQLite #18
надо начать с того, что вытереть строку с созданием активити вручную, а потом думать где подходящее место для этого метода
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 17:51     SQLite
Еще ссылки по теме:

Категории в SQLite Android
Android Sqlite trigger
Зашифровать Sqlite Android
JSON в SQLite Android
SQLite Android Android

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

Или воспользуйтесь поиском по форуму:
qdhtnsoyndtr
5 / 5 / 1
Регистрация: 29.11.2013
Сообщений: 466
17.02.2016, 17:51  [ТС]     SQLite #19
Все проблема решена.
Перемести метод insert в класс jsontet
Yandex
Объявления
17.02.2016, 17:51     SQLite
Ответ Создать тему
Опции темы

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