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

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

Войти
Регистрация
Восстановить пароль
 
Willyams
1 / 1 / 1
Регистрация: 28.06.2015
Сообщений: 76
Завершенные тесты: 1
#1

Работа с SQLiteDatabase - Программирование Android

21.05.2016, 18:09. Просмотров 68. Ответов 5
Метки нет (Все метки)

Здравствуйте, пишу кликер с использованием базы данных, в которой содержится информация о монстре.
почему то не срабатывает условие cursor.moveToNext() в функции makeGameHarder
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
package com.example.user.trytohitit;
 
 
public class MainActivity extends Activity {
    private int health;
    private String name;
    private int photoId;
    TextView healthView;
    Cursor cursor;
    ImageView view;
    TextView nameView;
    SQLiteOpenHelper clickerDataBaseHelper;
    SQLiteDatabase db;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try{
            clickerDataBaseHelper = new ClickerDataBaseHelper(this);
            db = clickerDataBaseHelper.getReadableDatabase();
            //TODO: при смерти босса нужно сместить id на 1 вперед
            cursor = db.query("CLICKER", new String[]{"NAME","HEALTH","IMAGE_RESOURCE_ID"}, "_id = ?", new String[]{Integer.toString(1)}, null,null,null);
            if(cursor.moveToFirst()){
                name = cursor.getString(0);
                health = cursor.getInt(1);
                photoId = cursor.getInt(2);
                Monster m = new Monster(name, health);//бъект класса монстер хз пока куда его деть
 
                view = (ImageView)findViewById(R.id.monsterView);//отрисовываем монстра
                view.setImageResource(photoId);
 
                nameView = (TextView)findViewById(R.id.monsterName);//даем ему имя
                nameView.setText(name);
 
                healthView = (TextView)findViewById(R.id.monsterHealth);
                healthView.setText(String.valueOf(health));
            }
            cursor.close();
            db.close();
 
        }catch (SQLiteException e){
            Toast toast = Toast.makeText(this, "Database unvailable", Toast.LENGTH_SHORT);
            toast.show();
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
 
    public void onHit(View view){
        health-=100;
        healthView.setText(String.valueOf(health));
        if(health <= 0){
            Toast.makeText(this, name + " is dead", Toast.LENGTH_SHORT).show();
            makeGameHarder();
        }
    }
    public void makeGameHarder(){
        if(cursor.moveToNext()){//почему здесь не срабатывает условие ?
            name = cursor.getString(0);
            health = cursor.getInt(1);
            photoId = cursor.getInt(2);
            view.setImageResource(photoId);
            nameView.setText(name);
            healthView.setText(String.valueOf(health));
        }
        cursor.close();
        db.close();
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}
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
package com.example.user.trytohitit;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
/**
 * Created by User on 21.05.2016.
 */
public class ClickerDataBaseHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "ClickerBase";
    private static final int DB_VERSION = 1;
 
     ClickerDataBaseHelper(Context context){
         super(context,DB_NAME,null,DB_VERSION);
 
     }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE CLICKER (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "NAME TEXT, " +
                "HEALTH INTEGER, " +
                "IMAGE_RESOURCE_ID INTEGER);");
        insertMonster(db,"Butcher",1000,R.drawable.butcher);
        insertMonster(db,"Belial",3000,R.drawable.belial);
        insertMonster(db,"Azmodan",5000,R.drawable.azmodan);
        insertMonster(db,"Butcher",10000,R.drawable.diablo);
 
    }
 
    private static void insertMonster(SQLiteDatabase db, String name, int health, int resourceId){
        ContentValues monsterValues = new ContentValues();
        monsterValues.put("NAME", name);
        monsterValues.put("HEALTH", health);
        monsterValues.put("IMAGE_RESOURCE_ID", resourceId);
        db.insert("CLICKER", null,monsterValues);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
    }
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2016, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с SQLiteDatabase (Программирование Android):

Передача SQLiteDatabase из namespace - Программирование Android
Подскажите насколько я понимаю, чтение БД из другого namaspace невозможно? Пробывал читать myPath = DB_PATH + DB_NAME try{checkDB =...

SQLiteDatabase как обновить таблицы? - Программирование Android
Привет, снова я )) Данные в базу закачиваются из других классов, то есть всё работает, но только если по отдельности открывать активити... ...

SQLiteDatabase, составление запроса для сортировки типа дерево - Программирование Android
здравствуйте, есть ListView который выгружает из базы позиции. как сделать так чтобы после каждого нажатия на позицию...

SQLiteDatabase - PHP БД
Подскажите пожалуйста, с какой базой работает этот класс?

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления - C#
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием - Visual C++
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 2
21.05.2016, 19:50 #2
Willyams, может потому, что курсор, да как и база уже закрыта?
Willyams
1 / 1 / 1
Регистрация: 28.06.2015
Сообщений: 76
Завершенные тесты: 1
21.05.2016, 21:06  [ТС] #3
Цитата Сообщение от YuraAAA Посмотреть сообщение
Willyams, может потому, что курсор, да как и база уже закрыта?
оу, спасибо за ответ, а не можете подсказать, в каком лучше месте ее закрывать ? в данном случае
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 2
21.05.2016, 21:12 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
=Willyams, cursor сразу надо закрывать, а если хотите получить новую информацию из БД - делать снова запрос.
db вообще можно не закрывать
Willyams
1 / 1 / 1
Регистрация: 28.06.2015
Сообщений: 76
Завершенные тесты: 1
21.05.2016, 22:27  [ТС] #5
спасибо

Добавлено через 12 минут
Тогда получается , чтобы мне считать новую информацию для нового монстра мне нужно заново инициализировать курсор, изза чего нельзя использовать написанную функцию несколько раз. Как то неудобно получается
Java
1
2
3
4
5
6
7
8
9
10
11
12
public void makeGameHarder(){
        Cursor cursor = db.query("CLICKER", new String[]{"NAME","HEALTH","IMAGE_RESOURCE_ID"}, "_id = ?", new String[]{Integer.toString(2)}, null,null,null);
        if(cursor.moveToFirst()){//почему здесь не срабатывает условие ?
            name = cursor.getString(0);
            health = cursor.getInt(1);
            photoId = cursor.getInt(2);
            view.setImageResource(photoId);
            nameView.setText(name);
            healthView.setText(String.valueOf(health));
        }
        cursor.close();
    }
Можно же как-то использовать cursor.moveToNext(), чтобы считать информацию из бд для следующего монстра?
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 2
21.05.2016, 23:46 #6
Willyams,

Java
1
2
3
4
5
6
if (cursor.moveToFirst()) {
            do {
                //Parse
            } while (cursor.moveToNext());
}
//Close cursor
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2016, 23:46
Привет! Вот еще темы с ответами:

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры) - Visual Basic .NET
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее отпускаем - она не реагирует. Public...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения - Термодинамика и МКТ
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную работу и КПД цикла предыдущей...

Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами) - VBA
Всем привет, подскажите каким образом можно из VBA сохранить документ txt в папке &quot;Общие документы&quot; и задать для него свойство &quot;скрытый&quot;...

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки - C (СИ)
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с прерываниями, указатели, работа с памятью,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.05.2016, 23:46
Ответ Создать тему
Опции темы

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