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

SQLite Андроид эмулятор и Железо по разному обрабатывают запросы - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Jsoup: парсинг странички и заполнение контентом Activity http://www.cyberforum.ru/android-dev/thread1614287.html
Здравствуйте. В общем столкнулся с такой проблемой. Нужно отпарсить страничку через JSOUP. на страничке может быть простой текст, картинки, заголовки и т.д. нужно вывести это все добро на Activity. Но вот с реализацией проблеммы. Не могу додуматься как это сделать... сначала я написал этот код: articleContent = HTMLPage.select("article.b-typo p"); if...
Android Не получается получить путь к карте памяти Всем привет. У меня вот такой вопрос: storage/sdcard0 это путь к памяти телефона storage/sdcard1 это собственно карта памяти. Функция getExternalStorageDirectory() возвращает storage/sdcard0. Подскажите, как мне получить путь к карте sdcard1? http://www.cyberforum.ru/android-dev/thread1613996.html
Текст в одну строку Android
здравствуйте. есть ооооочень длинный текст и нужно, что-бы об шел в одну строку безконечно долго, пока не закончится, и крутился в нужном направлении. вот xml <RelativeLayout android:id="@+id/news_holder" android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="top" ...
Android Подскажите по расположению элементов (Layouts)
Подскажите, как расположить элементы, так, чтобы "Кнопка 1" была вверху экарана, а "Кнопки 7, 8" внизу, а Кнопки 2-6 остались по середине экрана? Свойства Top и Bottom установлены <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" ...
Android Как сделать такой элемент? http://www.cyberforum.ru/android-dev/thread1613552.html
Добрый вечер! Нужно сделать локальный переключатель картинок - как такое сделать? Что нужно смотреть\искать\использовать? На слое есть большая картинка. На этой большой картинке должны располагаться несколько маленьких. Мелкие картинки будут находиться одна под одной. т.е., поулчается так, что мы можем увидеть только 1 маленькую картинку, но их гораздо больше. Переключатель должен менять...
Android Как вызвать из программы системное окно "Точка доступа WLAN"? Подскажите пожалуйста как вызвать из программы системное окно "Точка доступа WLAN"? Есть программа "Switch Network", которая вызывает окно "Настройка мобильных сетей", но исходников на нее не нашел. подробнее

Показать сообщение отдельно
lostandleft
2 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 96

SQLite Андроид эмулятор и Железо по разному обрабатывают запросы - Android

15.12.2015, 19:26. Просмотров 258. Ответов 6
Метки (Все метки)

Столкнулся с задачкой по работе с SQLITE в общем в железе воплотить получилось, а в эмуляторе не работает, хочу понять почему.
Пожалуйста посмотрите исходники, если есть какие-то комментарии буду рад.
Повторюсь в Железе на GalaxySIV все работает отлично и никаких проблем я не вижу. В эмуляторе работает чуть лучше чем никак.
В коде есть все комментарии по этому поводу.

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

Кому хочется посквернословить в теме вроде "опять нубы фигней страдают" проходят мимо.
Может так сказаться, что мои ответы для Вас не всегда покажутся приятными и адекватными.



Все описание проблемы в коде:
В интерфейсе делаем кнопочку и текст вью, которое можно скролить:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1">
 
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
 
 
 
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="Medium Text"
                    android:id="@+id/yourpoints"
                    android:layout_weight="0.16" />
    </ScrollView>
 
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:onClick="Points"
        android:id="@+id/Points"
        android:layout_gravity="center_horizontal"
        android:layout_weight="0.16" />
</LinearLayout>
В коде пишем:
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
package com.example.helloworld;
 
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
 
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
 
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
 
 
public class FinalTry extends Activity
{
    //Устанавливаем таймер жизни записи (строки) в базе данных
    int timer = 60;
 
    //Говорим что будем работать с ТекстВью и кнопочкой
    TextView yourpoints;
    Button Points;
    //Активируем ДБХелпер
    DBHelper dbHelper;
    //Задаем переменную Времени, в виде строки
    String  mLastUpdateTime;
 
 
    private static final String DATABASE_NAME = "database.db";
    private static final String DATABASE_TABLE_TRACKER = "tracker";
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.morda);
 
        yourpoints = (TextView)findViewById(R.id.yourpoints);
        Points = (Button)findViewById(R.id.Points);
 
        dbHelper = new DBHelper(this);//говорим, что будем работать с БД в этом проекте, в дальнейшем откроем класс с названием DBHelper
 
  
        //Устанавливаем клик листнер
        Points.setOnClickListener(new View.OnClickListener()
 
        {
           @Override
           public void onClick(View v)
           {
            sqlTracker();
            }
        });
 
 
    }
 
 
    public void sqlTracker ()
    {
        // подключаемся к БД
        SQLiteDatabase db = dbHelper.getWritableDatabase();
 
        //Берем актуальное время
        mLastUpdateTime = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(new Date());
 
       // создаем объект для данных
       ContentValues cv = new ContentValues();
        
        // получаем данные для ввода в таблицу
        String timeActual = new String(String.valueOf(mLastUpdateTime));
 
        //Получаем выборку из таблицы
        Cursor c = db.query(DATABASE_TABLE_TRACKER, null, null, null, null, null, null);
 
        // ставим позицию курсора на первую строку выборки
        // если в выборке нет строк, вернется false
 
            if (c.moveToFirst())//переходим на первую строку выборки
            {
                // определяем номера столбцов по имени в выборке
                int timeColIndex  = c.getColumnIndex("time"); // задаем переменную timeColIndex
 
 
                do {
 
                    //Читаем данные из таблицы
                    String timeCash = c.getString(timeColIndex);
 
                    //Делаем запись в текстовый вывод
                    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy HH:mm:ss");
                    Date d1 = null;
                    Date d2 = null;
                    long diff;
                    try {
                        d1 = format.parse(timeCash);
                        d2 = format.parse(mLastUpdateTime);
 
                        //Получаем разницу в секундах
                        diff = d2.getTime() - d1.getTime();
                        long diffSeconds = diff / 1000;
                        //Удаляем запись если она устарела больше чем указано в таймере
                        if (diffSeconds > timer)
                            {
                            //Со следующей строчкой засада, я бился больше суток, но никак не мог понять почему конструкция типа
                            //db.delete(DATABASE_TABLE_TRACKER, "time = "+timeCash , null);//Не работает ни в какую, уже чуть мышку не разбил,
                            //было ощущение что тип данных в таблице SQL не соответсвует типу данных в переменной timeCash.
                            //Нашел подтверждение на одном из форумов, что нужно поставить одинарные ковычки, в итоге изобрел костыль описанный ниже.
                            //С ним на реальном устройстве, (galaxy S4 - 5 версия андроида) все работает хорошо, никаким проблем нет, все так, как я задумывал.
                            //Но вот незадача в эмуляторе на гуглофоне нексус S не хочет кнопочка отрабатывать и никаких ошибок не выдает, и из базы данных SQL ничего
                            //не удаляет. Записи в SQL делает, но сообщение в ТексВью yourpoints.append не выводит, как будто вообще ничего не делает приложение.
                            //Но если к таблице SQL коннектиться на прямую через ADB то видно что записи в таблице создаются, но не удаляются.
                            //В общем следующая конструкция (костыль) отлично работает на моем аппарате, но не работает в эмуляторе, помогите разобраться.
                            db.delete(DATABASE_TABLE_TRACKER, "time = "+new String(String.valueOf("'"+timeCash+"'")) , null);
                            yourpoints.append("\nReading \n" + timeCash);
                            }
                        String difStr =  new String(String.valueOf(diffSeconds));
                        yourpoints.append("\nCalc \n"+difStr+"\nnow-"+d2+"\nSQl-"+d1);
                        } 
                    
                    catch (ParseException e) 
                        {
                        e.printStackTrace();
                        }
 
                        //Записываем новое время в базу
                    }
                        while (c.moveToNext());
                        long rowID =0;
                        cv.put("time", timeActual);
                        rowID = db.insert(DATABASE_TABLE_TRACKER, null, cv);
                        //Закрываем доступ к базе
                        c.close();
            }
            else
            {
                //Если не отработало условие выше, просто создаем новую запись в таблице и закрываем доступ
                long rowID =0;
                cv.put("time", timeActual);
                rowID = db.insert(DATABASE_TABLE_TRACKER, null, cv);
                c.close();
                yourpoints.setText("Соединение закрыто данные записаны");
            }
 
    }
 
 
//Описание класса DBHelper
    private class DBHelper  extends   SQLiteOpenHelper
    {
        public DBHelper (Context context)
        {
        //конструктор суперкласса, версия базы данных
        super (context ,   DATABASE_NAME ,  null ,   1 ) ;
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
 
            // создаем таблицу с полями
            db.execSQL("create table "+ DATABASE_TABLE_TRACKER + " ("
          + "id integer primary key autoincrement, "
          + "time text "
 
          +         ");" );
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_TABLE_TRACKER);
            onCreate(db);
        }
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru