Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Добавление таблиц в базу данных

Здравствуйте. Хочу добавить ещё одну таблицу в уже существующий файл базы данных. Вот код:
Код Java(TM) 2 Platform Standard Edition 5.0
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
public class BookOfLifeDataBaseHelper extends SQLiteOpenHelper implements BaseColumns {
 
    //название файла базы данных
    private static final String DATABASE_NAME = "book_of_life.db";
    //версия базы данных
    private static final int DATABASE_VERSION=1;
 
    public static String TABLE_NAME  = "fff";
    public static final String NAME_OF_AUTHOR_STATEMENT = "name_of_author_statement";
    public static final String STATEMENT = "statement";
 
    //запрос SQL на создание базы данных
    private static String SQL_CREATE_ENTRIES = "CREATE TABLE " + TABLE_NAME
            + " (" + BookOfLifeDataBaseHelper._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + NAME_OF_AUTHOR_STATEMENT + " VARCHAR(255), "
            + STATEMENT + " VARCHAR(255));";
    //запрос SQL на удаление базы данных
    private static String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS" + TABLE_NAME ;
 
 
    public BookOfLifeDataBaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    //создаём базу данных
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }
}
Код с андроид студио. То есть у меня уже есть созданная база данных, и я с помощью другуго метода меняю название таблицы. Но она не создаётся. Или в одном файле базы данных нельзя хранить две таблицы?
Ответ: Метод onCreate хелпера вызывается только тогда, когда у вас НЕТ базы, т.е. этот запрос и не должен работать. Нужно организовать как-нибудь так:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
SQLiteDatabase sqdb = db.getWritableDatabase();
 
String insertQuery = "CREATE TABLE " + TABLE_NAME
            + " (" + BookOfLifeDataBaseHelper._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + NAME_OF_AUTHOR_STATEMENT + " VARCHAR(255), "
            + STATEMENT + " VARCHAR(255));";
sqdb.execSQL(insertQuery);
вот здесь почитайте, может поможет
Вопрос: Добавление данных в sql

Здравствуйте. При изучении программирования под андроид у меня возник вопрос: Как при создании базы данных заполнять её данными( Не просто добавить одну строку,
Как показано в примере ниже:
Код Javascript
1
2
3
4
5
6
7
ContentValues values = new ContentValues();
        values.put(COLUMN_PRODUCTNAME, "test1");
        values.put(COLUMN_QUANTITY, "test2");
 
        SQLiteDatabase db = this.getWritableDatabase();
        
        db.insert(TABLE_PRODUCTS, null, values);
а 100 строк или даже больше). Чтобы дальше работать с этими строками (этой базой данных).
Заранее спасибо.
Ответ: Через цикл.
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
for(int i=0;i<10;i++)
    {
    ContentValues values=new ContentValues(); 
    values.put("codigo", String.valueOf(i));
    values.put("produto", "Net");
    values.put("qtd", String.valueOf(i));
    sql.insert("est", null, values);
    }
Вопрос: Получение и разбор данных по Bluetooth

Всем привет. Очень нужна помощь, не могу найти решение. Задача такова, что с ардуино посылаются показания с датчиков и различные установки.
Для того, чтобы научиться принимать команды использую простой код на ардуино:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
void loop() {
  for (int i=0; i<100; i++){
    Serial.print("temp=");
    Serial.println(i);
    
    Serial.print("temp2=");
    Serial.println(i*2);
    
    delay(100);
    }
В качестве разделителя использую "=". На телефоне по нему разделяю строку, левая часть получается команда, правая - значение.

Вот код который отвечает за разбор команд:
Java(TM) 2 Platform Standard Edition 5.0
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
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   // если приняли сообщение в Handler
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                // формируем строку
                        int endOfLineIndex = sb.indexOf("\r\n");                            // определяем символы конца строки
                        if (endOfLineIndex > 0) {                                            // если встречаем конец строки,
                            String sbprint = sb.substring(0, endOfLineIndex);               // то извлекаем строку
                            sb.delete(0, sb.length());                                      // и очищаем sb
                            String[] command = sbprint.split("=");
                            if(command[0].compareTo("temp")==0) {
                                txtArduino.setText("Temp: " + command[1]);             // обновляем TextView
                            }
                            if(command[0].compareTo("time")==0) {
                                time.setText("time: " + command[1]);             // обновляем TextView
                            }
                            btnOff.setEnabled(true);
                            btnOn.setEnabled(true);
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
        };
Проблема заключается в том, что первая команда распознается и выводится, а вот вторая никак не хочет. И так при каждой итерации.
Ответ: Если я правильно понял, то вот:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void run() {
            byte[] buffer = new byte[256];  // buffer store for the stream
            int bytes; // bytes returned from read()
 
            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);        // Получаем кол-во байт и само собщение в байтовый массив "buffer"
                    h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Отправляем в очередь сообщений Handler
                } catch (IOException e) {
                    break;
                }
            }
        }
Добавлено через 4 часа 57 минут
Удалось добиться результата. Изменил способ отправки команд на построчно, а одной строкой. Для этого добавил еще один разделитель, который позволяет вначале разбить на отдельные команды, а потом команду на значение и название параметра.

Код ардуино:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
void loop() {
  for (int i=0; i<100; i++){
    Serial.print("temp=");
    Serial.print(i);
    Serial.print("|");
    Serial.print("time=");
    Serial.print(i);
    Serial.print("|");
    Serial.println();
    delay(500);
    }
}
Код приложения:
Java(TM) 2 Platform Standard Edition 5.0
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
h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   // если приняли сообщение в Handler
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                // формируем строку
                        int endOfLineIndex = sb.indexOf("\r\n");                            // определяем символы конца строки
                        if (endOfLineIndex > 0) {                                            // если встречаем конец строки,
                            String sbprint = sb.substring(0, endOfLineIndex);               // то извлекаем строку
                            sb.delete(0, sb.length());                                      // и очищаем sb
                            Log.d(TAG, sbprint);
                            String[] result = sbprint.split("\\|");
                            for (int i=0; i<result.length; i++){
                                String[] command = result[i].split("=");
                            if(command[0].compareTo("temp")==0) {
                                txtArduino.setText("Temp: " + command[1]);             // обновляем TextView
                            }
                            if(command[0].compareTo("time")==0) {
                                time.setText("time: " + command[1]);             // обновляем TextView
                            }
                            }
                            btnOff.setEnabled(true);
                            btnOn.setEnabled(true);
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
        };
Вопрос: При считывании данных из таблицы, данные становятся пустыми

Проблема в том что когда я записываю новый элемент таблицы проблем не возникает и данные вводятся корректно, но когда я пытаюсь их считать, то все выведенные элементы определяются как Null или 0. При этом их количество выводится верно.
База данных
Код Java(TM) 2 Platform Standard Edition 5.0
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
package com.example.work_2.sqlite;
 
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.example.work_2.model.Raspisanie;;
 
public class SQLdatabaseDBAction extends SQLiteOpenHelper {
 
    // Версия базы данных
    private static final int DATABASE_VERSION = 1;
 
    // Имя базы данных
    private static final String DATABASE_NAME = "MYBD";
 
    /**
    * Конструктор
    */
    public SQLdatabaseDBAction(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    /**
    * Конструктор
    */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // SQL запрос на создание таблицы
        String CREATE_SQLDATABASEDBACTION = "CREATE TABLE SQLDATABASE ( " +
                "ID INTEGER PRIMARY KEY AUTOINCREMENT, "+
                "DAY TEXT, "+
                "VOLUME TEXT, "+
                "TYPE TEXT, "+
                "TIME TEXT, "+
                "DAY_ID INTEGER )";
        // Выполняем запрос на создание таблицы
        db.execSQL(CREATE_SQLDATABASEDBACTION);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Если с таблицей ппроблемы - удаляем предыдущую версию таблицы
        db.execSQL("DROP TABLE IF EXISTS SQLDATABASE");
        // Пересоздаем таблицу
        this.onCreate(db);
    }
 
 
    //----------------------------------------------------------------------------------------
    // Основные операции для работы с таблицей (добавление, удаление, редактирование и т.п.)
    //----------------------------------------------------------------------------------------
 
 
    // Имя тиблицы
    private static final String TABLE_SQLDATABASE = "SQLDATABASE";
 
    // Колонки в таблице
    private static final String KEY_ID = "ID";
    private static final String KEY_DAY = "DAY";
    private static final String KEY_VOLUME = "VOLUME";
    private static final String KEY_TYPE = "TYPE";
    private static final String KEY_TIME = "TIME";
    private static final String KEY_DAY_ID = "DAY_ID";
 
    private static final String[] COLUMNS = {KEY_ID, KEY_DAY, KEY_VOLUME, KEY_TYPE, KEY_TIME, KEY_DAY_ID};
 
    /**
    * Добавить запись в БД
    */
    public void addRec(Raspisanie raspisanie){
        Log.d("addBook", raspisanie.toString());
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Список данных "column/value"
        ContentValues values = new ContentValues();
        values.put(KEY_DAY, raspisanie.getDAY()); // 
        values.put(KEY_VOLUME, raspisanie.getVOLUME()); // 
        values.put(KEY_TYPE, raspisanie.getTYPE()); // 
        values.put(KEY_TIME, raspisanie.getTIME()); // 
        values.put(KEY_DAY_ID, raspisanie.getDAY_ID()); // 
        // 3. Добавили запись
        db.insert(TABLE_SQLDATABASE, // table
                null, //nullColumnHack
                values); // key/value -> keys = column names/ values = column values
        // 4. Закрыли указатель
        //db.query("SQLDATABASE", null, null, null, null, null, "KEY_DAY_ID");
        db.close();
    }
 
    /**
    * Дать запись из БД по идентификатору.
    */
    public Raspisanie getRec(int id){
        // 1. Указатель на читаемую БД
        SQLiteDatabase db = this.getReadableDatabase();
        // 2. Запрос на чтение
        Cursor cursor =
                db.query(TABLE_SQLDATABASE, // a. table
                COLUMNS, // b. column names
                " id = ?", // c. selections
                new String[] { String.valueOf(id) }, // d. selections args
                null, // e. group by
                null, // f. having
                KEY_DAY_ID, // g. order by
                null); // h. limit
        // 3. Если есть записи - перемещаем курсор на первую
        if (cursor != null)
            cursor.moveToFirst();
        // 4. Заполняем данными результат
        Raspisanie raspisanie = new Raspisanie();
        raspisanie.setID(Integer.parseInt(cursor.getString(0)));
        raspisanie.setDAY((cursor.getString(1)));
        raspisanie.setVOLUME((cursor.getString(2)));
        raspisanie.setTYPE((cursor.getString(3)));
        raspisanie.setTIME((cursor.getString(4)));
        raspisanie.setDAY_ID(Integer.parseInt(cursor.getString(5)));
        // 5. Закрываем указатель на БД
        db.close();
        // 6. Возвращаем результат
        return raspisanie;
    }
 
    /**
    * Дать все записи из БД
    */
    public List<Raspisanie> getRecAll() {
        List<Raspisanie> raspisanies = new LinkedList<Raspisanie>();
        // 1. Создаем запрос на выборку
        String query = "SELECT  * FROM " + TABLE_SQLDATABASE;
        // 2. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        // 3. Создаем результирующий список
        Raspisanie raspisanie = null;
        if (cursor.moveToFirst()) {
            do {
                raspisanie = new Raspisanie();
                raspisanie.setID(Integer.parseInt(cursor.getString(0)));
                raspisanie.setDAY((cursor.getString(1)));
                raspisanie.setVOLUME((cursor.getString(2)));
                raspisanie.setTYPE((cursor.getString(3)));
                raspisanie.setTIME((cursor.getString(4)));
                raspisanie.setDAY_ID(Integer.parseInt(cursor.getString(5)));
                // Добавляем запись в список
                raspisanies.add(raspisanie);
            } while (cursor.moveToNext());
        }
        // 4. Закрываем указатель
        db.close();
        // 5. Возвращаем результат
        return raspisanies;
    }
 
    /**
    * Редактировать запись в БД
    */
    public int edRec(Raspisanie raspisanie) {
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Список данных "column/value"
        ContentValues values = new ContentValues();
        values.put("DAY", raspisanie.getDAY()); // 
        values.put("VOLUME", raspisanie.getVOLUME()); // 
        values.put("TYPE", raspisanie.getTYPE()); // 
        values.put("TIME", raspisanie.getTIME()); // 
        values.put("DAY_ID", raspisanie.getDAY_ID()); // 
        // 3. Обновляем запись
        int i = db.update(TABLE_SQLDATABASE, //table
                values, // column/value
                KEY_ID+" = ?", // selections
                new String[] { String.valueOf(raspisanie.getID()) }); //selection args
        // 4. Закрываем указатель
        db.close();
        // 5. Возвращаем результат выполнение функции UPDATE
        return i;
    }
 
    /**
    * Удалить запись из БД
    */
    public void deleteRec(Raspisanie raspisanie) {
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Удаляем запись
        db.delete(TABLE_SQLDATABASE,
                KEY_ID+" = ?",
                new String[] { String.valueOf(raspisanie.getID()) });
        // 3. Зкрываем указатель
        db.close();
    }
 
    /**
    * Удалить запись по идентификатору
    */
    public void deleteRec(int id) {
        Raspisanie d=new Raspisanie();
       d.setID(id);
       deleteRec(id);
    }
 
}
Страница где выводятся все элементы таблицы
Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.example.work_2;
 
 
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.example.work_2.model.Raspisanie;
import com.example.work_2.sqlite.SQLdatabaseDBAction;
 
public class Table extends ActionBarActivity {
    
    String[] groups = new String[] {"Понедельник", "Вторник", "Среда", "Четверг", "Пятница","Суббота"};
    
    AlertDialog.Builder ad;
    Context context;
    ListView lvMain;
    final String LOG_TAG = "myLogs";
    
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table);
        SQLdatabaseDBAction db = new SQLdatabaseDBAction(this);
        LayoutInflater ltInflater = getLayoutInflater();
        LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);
 
        List<Raspisanie> list = db.getRecAll();
 
        for (int i = 0; i < list.size(); i++) {
            View item = ltInflater.inflate(R.layout.lable, linLayout, false);
            //TextView tvName = (TextView) item.findViewById(R.id.TextView03);
            //TextView tvName1 = (TextView) item.findViewById(R.id.textView1);
            //tvName1.setText(list.get(i).toString() );
            //tvName.setText(String.valueOf(list.size()));
            //linLayout.addView(item);
            
            TextView text1 = (TextView) item.findViewById(R.id.text1);
            TextView text2 = (TextView) item.findViewById(R.id.text2);
            TextView text3 = (TextView) item.findViewById(R.id.text3);
            TextView text4 = (TextView) item.findViewById(R.id.text4);
            
            text1.setText(list.get(i).toString() );
            text2.setText(list.get(i).toString1() );
            text3.setText(list.get(i).toString2() );
            //text1.setText(list1.toString() );
            //text2.setText(list1.toString1() );
            //text3.setText(list1.toString2() );
            //text4.setText(list.get(i).toString3() );
            //text4.setText(list.get(i).toString3() );
            text4.setText(String.valueOf(i));
            linLayout.addView(item);
          }
        
        
 
    }
    public void onClick(View v)
    {
        Intent intent = new Intent(Table.this, Add_new_table.class);
        startActivity(intent);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.table, menu);
        return true;
    }
 
    @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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
И модули базы данных
Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.example.work_2.model;
 
public class Raspisanie {
        private int id;
        private String DAY;
        private String VOLUME;
        private String TYPE;
        private String TIME;
        private int    DAY_ID;
        private int fID;
 
        public int getID(){
             return fID;
       }
 
        public void setID(int d){
             fID=d;
       }
 
        private String fDAY;
 
        public String getDAY(){
             return fDAY;
       }
 
        public void setDAY(String d){
             fDAY=d;
       }
 
        private String fVOLUME;
 
        public String getVOLUME(){
             return fVOLUME;
       }
 
        public void setVOLUME(String d){
             fVOLUME=d;
       }
 
        private String fTYPE;
 
        public String getTYPE(){
             return fTYPE;
       }
 
        public void setTYPE(String d){
             fTYPE=d;
       }
 
        private String fTIME;
 
        public String getTIME(){
             return fTIME;
       }
 
        public void setTIME(String d){
             fTIME=d;
       }
 
        private int fDAY_ID;
 
        public int getDAY_ID(){
             return fDAY_ID;
       }
 
        public void setDAY_ID(int d){
             fDAY_ID=d;
       }
     
        public Raspisanie(){}
     
        
        public Raspisanie(String DAY, String VOLUME,String TYPE,String TIME, int DAY_ID) {
            super();
            this.DAY = DAY;
            this.VOLUME = VOLUME;
            this.TYPE = TYPE;
            this.TIME = TIME;
            this.DAY_ID = DAY_ID;
        }
     
        //getters & setters
     
        @Override
        public String toString() {
            return "122";
        }
        public String toString1() {
            return VOLUME;
        }
        public String toString2() {
            return TYPE;
        }
        public String toString3() {
            return TIME + " " + DAY_ID;
        }
 
}
Ответ: Filtar, от скуки покопался в твоём коде. Тяжело читается ))

Исправил немного. Тут:

Код Java(TM) 2 Platform Standard Edition 5.0
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
185
186
187
188
189
190
191
192
193
194
195
196
public class SQLdatabaseDBAction extends SQLiteOpenHelper {
 
    // Версия базы данных
    private static final int DATABASE_VERSION = 1;
 
    // Имя базы данных
    private static final String DATABASE_NAME = "MYBD";
 
    /**
     * Конструктор
     */
    public SQLdatabaseDBAction(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    /**
     * Конструктор
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // SQL запрос на создание таблицы
        String CREATE_SQLDATABASEDBACTION = "CREATE TABLE SQLDATABASE ( " +
                KEY_ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+
                KEY_DAY+" TEXT, "+
                KEY_VOLUME+" TEXT, "+
                KEY_TYPE+" TEXT, "+
                KEY_TIME+" TEXT, "+
                KEY_DAY_ID+" INTEGER);";
        // Выполняем запрос на создание таблицы
        db.execSQL(CREATE_SQLDATABASEDBACTION);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Если с таблицей ппроблемы - удаляем предыдущую версию таблицы
        //db.execSQL("DROP TABLE IF EXISTS SQLDATABASE");
        // Пересоздаем таблицу
        //this.onCreate(db);
    }
 
 
    //----------------------------------------------------------------------------------------
    // Основные операции для работы с таблицей (добавление, удаление, редактирование и т.п.)
    //----------------------------------------------------------------------------------------
 
 
    // Имя тиблицы
    private static final String TABLE_SQLDATABASE = "SQLDATABASE";
 
    // Колонки в таблице
    //                private static final String KEY_ID = "ID";
    private static final String KEY_ID = "_id";
    private static final String KEY_DAY = "DAY";
    private static final String KEY_VOLUME = "VOLUME";
    private static final String KEY_TYPE = "TYPE";
    private static final String KEY_TIME = "TIME";
    private static final String KEY_DAY_ID = "DAY_ID";
 
    private static final String[] COLUMNS = {KEY_ID, KEY_DAY, KEY_VOLUME, KEY_TYPE, KEY_TIME, KEY_DAY_ID};
 
    /**
     * Добавить запись в БД
     */
    public void addRec(Raspisanie raspisanie){
 
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Список данных "column/value"
        ContentValues values = new ContentValues();
        values.put(KEY_DAY, raspisanie.getDAY()); //
 
        values.put(KEY_VOLUME, raspisanie.getVOLUME()); //
        values.put(KEY_TYPE, raspisanie.getTYPE()); //
        values.put(KEY_TIME, raspisanie.getTIME()); //
        values.put(KEY_DAY_ID, raspisanie.getDAY_ID()); //
        // 3. Добавили запись
        db.insert(TABLE_SQLDATABASE, // table
                null, //nullColumnHack
                values); // key/value -> keys = column names/ values = column values
        // 4. Закрыли указатель
        //db.query("SQLDATABASE", null, null, null, null, null, "KEY_DAY_ID");
        db.close();
    }
 
    /**
     * Дать запись из БД по идентификатору.
     */
    public Raspisanie getRec(int id){
        // 1. Указатель на читаемую БД
        SQLiteDatabase db = this.getReadableDatabase();
        // 2. Запрос на чтение
        Cursor cursor =
                db.query(TABLE_SQLDATABASE, // a. table
                        COLUMNS, // b. column names
                        "_id = ?", // c. selections
                        new String[] { String.valueOf(id) }, // d. selections args
                        null, // e. group by
                        null, // f. having
                        KEY_DAY_ID, // g. order by
                        null); // h. limit
        // 3. Если есть записи - перемещаем курсор на первую
        if (cursor != null)
            cursor.moveToFirst();
        // 4. Заполняем данными результат
        Raspisanie raspisanie = new Raspisanie();
        raspisanie.setID(Integer.parseInt(cursor.getString(0)));
        raspisanie.setDAY((cursor.getString(1)));
        raspisanie.setVOLUME((cursor.getString(2)));
        raspisanie.setTYPE((cursor.getString(3)));
        raspisanie.setTIME((cursor.getString(4)));
        raspisanie.setDAY_ID(Integer.parseInt(cursor.getString(5)));
        // 5. Закрываем указатель на БД
        db.close();
        // 6. Возвращаем результат
        return raspisanie;
    }
 
    /**
     * Дать все записи из БД
     */
    public List<Raspisanie> getRecAll() {
        List<Raspisanie> raspisanies = new LinkedList<>();
        // 1. Создаем запрос на выборку
        String query = "SELECT * FROM " + TABLE_SQLDATABASE;
        // 2. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
 
        // 3. Создаем результирующий список
        //Raspisanie raspisanie = null;
        if (cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(cursor.getColumnIndex(KEY_ID));
                String day = cursor.getString(cursor.getColumnIndex(KEY_DAY));
                String volume = cursor.getString(cursor.getColumnIndex(KEY_VOLUME));
                String type = cursor.getString(cursor.getColumnIndex(KEY_TYPE));
                String time = cursor.getString(cursor.getColumnIndex(KEY_TIME));
                int dayNum = cursor.getInt(cursor.getColumnIndex(KEY_DAY_ID));
 
                raspisanies.add(new Raspisanie(day, volume, type, time, dayNum));
            } while (cursor.moveToNext());
        }
        // 4. Закрываем указатель
        db.close();
        // 5. Возвращаем результат
        return raspisanies;
    }
 
    /**
     * Редактировать запись в БД
     */
    public int edRec(Raspisanie raspisanie) {
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Список данных "column/value"
        ContentValues values = new ContentValues();
        values.put("DAY", raspisanie.getDAY()); //
        values.put("VOLUME", raspisanie.getVOLUME()); //
        values.put("TYPE", raspisanie.getTYPE()); //
        values.put("TIME", raspisanie.getTIME()); //
        values.put("DAY_ID", raspisanie.getDAY_ID()); //
        // 3. Обновляем запись
        int i = db.update(TABLE_SQLDATABASE, //table
                values, // column/value
                KEY_ID+" = ?", // selections
                new String[] { String.valueOf(raspisanie.getID()) }); //selection args
        // 4. Закрываем указатель
        db.close();
        // 5. Возвращаем результат выполнение функции UPDATE
        return i;
    }
 
    /**
     * Удалить запись из БД
     */
    public void deleteRec(Raspisanie raspisanie) {
        // 1. Указатель на изменяемую БД
        SQLiteDatabase db = this.getWritableDatabase();
        // 2. Удаляем запись
        db.delete(TABLE_SQLDATABASE,
                KEY_ID+" = ?",
                new String[] { String.valueOf(raspisanie.getID()) });
        // 3. Зкрываем указатель
        db.close();
    }
 
    /**
     * Удалить запись по идентификатору
     */
    public void deleteRec(int id) {
        Raspisanie d=new Raspisanie();
        d.setID(id);
        deleteRec(id);
    }
 
}
и тут:

Код Java(TM) 2 Platform Standard Edition 5.0
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
public class Raspisanie {
    private int id;
    private String DAY;
    private String VOLUME;
    private String TYPE;
    private String TIME;
    private int    DAY_ID;
    private int fID;
 
    @Override
    public String toString() {
        return ""+DAY+" "+VOLUME+" "+TYPE+" "+TIME+" "+DAY_ID;
    }
 
    public int getID(){
        return fID;
    }
 
    public void setID(int d){
        fID=d;
    }
 
    private String fDAY;
 
    public String getDAY(){
        return DAY;
    }
 
    public void setDAY(String d){
        DAY=d;
    }
 
    private String fVOLUME;
 
    public String getVOLUME(){
        return VOLUME;
    }
 
    public void setVOLUME(String d){
        fVOLUME=d;
    }
 
    private String fTYPE;
 
    public String getTYPE(){
        return TYPE;
    }
 
    public void setTYPE(String d){
        fTYPE=d;
    }
 
    private String fTIME;
 
    public String getTIME(){
        return TIME;
    }
 
    public void setTIME(String d){
        fTIME=d;
    }
 
    private int fDAY_ID;
 
    public int getDAY_ID(){
        return DAY_ID;
    }
 
    public void setDAY_ID(int d){
        fDAY_ID=d;
    }
 
    public Raspisanie(){}
 
 
    public Raspisanie(String DAY, String VOLUME,String TYPE,String TIME, int DAY_ID) {
        super();
        this.DAY = DAY;
        this.VOLUME = VOLUME;
        this.TYPE = TYPE;
        this.TIME = TIME;
        this.DAY_ID = DAY_ID;
    }
 
    //getters & setters
 
 
    public String toString1() {
        return VOLUME;
    }
    public String toString2() {
        return TYPE;
    }
    public String toString3() {
        return TIME + " " + DAY_ID;
    }
 
}
проверил вот таким кодом:

Код Java(TM) 2 Platform Standard Edition 5.0
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 MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Raspisanie raspisanie1 = new Raspisanie("1day", "1volume", "1type", "1time", 1777);
        Raspisanie raspisanie2 = new Raspisanie("2day", "2volume", "2type", "2time", 2777);
        SQLdatabaseDBAction dbAction = new SQLdatabaseDBAction(this);
 
        dbAction.addRec(raspisanie1);
        dbAction.addRec(raspisanie2);
 
        List<Raspisanie> list = dbAction.getRecAll();
 
        Log.d("myLog", "Start");
        for(Raspisanie item: list) {
            Log.d("myLog", "" + item.getDAY());
            Log.d("myLog", "" + item.getVOLUME());
            Log.d("myLog", "" + item.getTYPE());
            Log.d("myLog", "" + item.getTIME());
            Log.d("myLog", "" + item.getDAY_ID());
        }
        Log.d("myLog", "End");
    }
}
всё работает. В классе Raspisanie много лишних букв "f" ))
Вопрос: Вывод данных полученных через Bluetooth на экран

Есть датчик dht22 с него приходят 2 показателя: Температура и влажность,требуется получить данные по блютус на смартфон и вывести на экран.

Использую данный прмиер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                
                        int endOfLineIndex = sb.indexOf("\r\n");                            
                        if (endOfLineIndex > 0) {                                            
                            String sbprint = sb.substring(0, endOfLineIndex);               
                            sb.delete(0, sb.length());                                      
                            txtArduino.setText(sbprint);             
                            
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
Но в данном случае все выводиться в 1 текстовое поле, подскажите где можно достать как разделить показатели, или нужно делать 2 Handler, и еще 1 вопрос - частоту опроса датчика нужно менять в скетче ардуино или это можно сделать в каком то цикле в handler.
Ответ:
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
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:
                        // если приняли сообщение в Handler
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                // формируем строку
                        int endOfLineIndex = sb.indexOf("\r\n");                            // определяем символы конца строки
                        if (endOfLineIndex > 0) {                                            // если встречаем конец строки,
                            String sbprint = sb.substring(0, endOfLineIndex);               // то извлекаем строку
                            sb.delete(0, sb.length());// и очищаем sb
 
                            String[] sb = sbprint.split("U");
                            for (int i=0; i<sb.length; i++) {
                                String[] command = sb[i].split("=");
                                if (command[0].compareTo("h") == 0) {
                                    txtArduino.setText("Humidity :"  + sb);             // обновляем TextView
                                }
                            }
 
 
 
 
                            // обновляем TextView
 
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
        };
видимо я плохо понял, дайте ссылку на пример или где подробно описано выделение и правильная сортировка.
заранее спс
Вопрос: Создание мессенджера с шифрованием данных

Всем привет. В общем я хочу написать дипломную работу, а для этого мне нужно создать кроссплатформенный простенький мессенджер как минимум для 2-х платформ и обязательно с собственным алгоритмом шифрования данных. Я в этом деле новичок совсем, кто что подскажет, с чего можно начать? Я немного не понимаю по какому алгоритму шифрования работают мессенджеры и как это работает?
Тема диплома "Разработка криптографической системы защиты данных для различных платформ"
Буду благодарен!
Ответ: Спасибо, в принципе нашел материал для создания чат приложения на Firebase для андроид, а можно ли потом создать такое же приложение для других платформ, например Windows или Linux? Я так понимаю, на всех платформах они будут обращаться к одному хранилищу Firebase? Спасибо заранее
Вопрос: Создание приложения "Расписание по группам вуза"

Доброго времени суток, пришло время работы над дипломом.
Хочу создать приложение для андроид Расписание по группам вуза.
Все данные есть на сайте как мне связать сайт с программой, и установить запоминание группы и загрузку расписание этой группы на неделю, если нет доступа в интернет к следующему обращению к приложению.
Подскажите что где читать, для создания данной программы, раньше не писал приложения, весь софт есть.
Ответ:
Цитата Сообщение от no0t24 Посмотреть сообщение
раньше не писал приложения
Тогда, это будет не очень просто.
Цитата Сообщение от no0t24 Посмотреть сообщение
Все данные есть на сайте как мне связать сайт с программой
Через API, предоставляемое сайтом.

Цитата Сообщение от no0t24 Посмотреть сообщение
и установить запоминание группы и загрузку расписание этой группы на неделю, если нет доступа в интернет к следующему обращению к приложению.
Хранить всё в локальной базе SQLite.
Вопрос: Передать данные из фрагмента в Dialog Fragment

Всем привет. У меня вопрос: Как в диалогФрагмент передать данные из фрагмента. Нужно передать позицию выбранного элемента gridViev, и в зависимости от выбранного элемента взять данные из ArrayList<DataO>, который заполняется из json, чтобы заполнить диалог.
диалогФрагмент
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
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.ArrayList;
 
 
public class Dialog1 extends DialogFragment implements OnClickListener {
    private TextView sumPrice;
    private OnFragmentInteractionListener mListener;
    public TextView pricemodal;
    public Button btnModal;
    public ImageView orderLogo;
    public TextView description;
    public ArrayList<DataO> dataOrder;
    public static Dialog1 newInstance(int index) {
        Dialog1 fragment = new Dialog1();
        Bundle args = new Bundle();
        args.putInt("index", index);
        fragment.setArguments(args);
        return fragment;
    }
    public int getIndex(){
        return getArguments().getInt("index",0);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View modal = inflater.inflate(R.layout.modal_fragment, null);
        pricemodal =(TextView)modal.findViewById(R.id.priceModal);
        btnModal=(Button)modal.findViewById(R.id.btnmodal);
        orderLogo=(ImageView)modal.findViewById(R.id.imageModal);
        description=(TextView)modal.findViewById(R.id.descriptionModal);
        modal.findViewById(R.id.btnmodal).setOnClickListener(this);
        return modal;
    }
    public void UpdateDialog(){
        
    }
 
 
 
    public interface OnFragmentInteractionListener {
 
    }
    public void onClick(View v) {
        //sumPrice.setText("1");
        dismiss();
    }
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);
 
    }
    public void onCancel(DialogInterface dialog) {
        super.onCancel(dialog);
 
    }
 
}
Фрагмент из которого вызывается диалог.
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
185
186
187
188
189
190
191
192
193
import android.app.DialogFragment;
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
 
 
public class OrderFragment extends Fragment {
 
    DialogFragment modal;
    View view;
    DataAdapter OrAdapter;
    GridView gvOrder;
    protected static ArrayList<DataO> OrderData;
    int choiseIndex=0;
 
    private OnFragmentInteractionListener mListener;
 
    public static OrderFragment newInstance() {
        OrderFragment fragment = new OrderFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
    }
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", choiseIndex);
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_order, container, false);
        modal=new Dialog1();
        new DataOInit().execute();
        return view;
    }
    public class DataOInit extends AsyncTask<Void, Void, String> {
 
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;
        String resultJson = "";
 
        @Override
        protected String doInBackground(Void... params) {
            // получаем данные с внешнего ресурса
            try {
                URL url = new URL(MainActivity.ARTICLE_URL);
 
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();
 
                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();
 
                reader = new BufferedReader(new InputStreamReader(inputStream));
 
                String line;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
 
                resultJson = buffer.toString();
 
            } catch (Exception e) {
                e.printStackTrace();
            }
            return resultJson;
        }
 
        @Override
        protected void onPostExecute(String strJson) {
            super.onPostExecute(strJson);
 
            JSONObject dataJsonObj = null;
            OrderData = new ArrayList<>();
            String name,price,description,picture;
            int id;
 
            try {
                dataJsonObj = new JSONObject(strJson);
                JSONArray events = dataJsonObj.getJSONArray("events");
                for (int i = 0; i < events.length(); i++) {
                    JSONObject partnerItem = events.getJSONObject(i);
 
                    name = partnerItem.getString("name");
                    price = partnerItem.getString("price");
                    id = partnerItem.getInt("id");
                    description = partnerItem.getString("description");
                    picture = partnerItem.getString("picture");
                    OrderData.add(
                            new DataO(
                                    name,
                                    price,
                                    id,
                                    description,
                                    picture
                            )
                    );
 
                    setData();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
 
    private void setData() {
 
        if(OrderData!=null && OrderData.size()>0) {
            try {
                OrAdapter = new DataAdapter(getActivity(), OrderData);
                gvOrder = (GridView) view.findViewById(R.id.gridView);
                gvOrder.setAdapter(OrAdapter);
                gvOrder.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                        /*DataO obj=OrderData.get(position);
                        String Name=obj.getName();
                        String Price=obj.getPrice();
                        String Description=obj.getDescription();
                        String Picture=obj.getPicture();
                        Bundle args = new Bundle();
                        args.putString(Name,Name);
                        args.putString(Price,Price);
                        args.putString(Description,Description);
                        args.putString(Picture,Picture);*/
                        showDialog(position);
                        modal.show(getFragmentManager(), "Dialog1");
 
                    }
                });
            } catch (NullPointerException ne) {
 
            }
        }
    }
    void showDialog(int index){
        choiseIndex=index;
        modal.show(getFragmentManager(), "Dialog1");
    }
 
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }
 
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
 
    }
 
    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }
 
    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }
 
 
}
Ответ: дата передается чере newinstance
вот тут гугл обьясняет:
Вопрос: Разница в датах

Ув. программисты, подскажите, пожалуйста, как правильно посчитать разницу между двумя датами в годах, месяцах и днях.
Я могу получить разницу между двумя датами просто в днях. С помощью простого Calendar в миллисекундах с последующим переводом в дни, с помощью старенького класса Date, и с помощью joda.time.
Но мне нужно не точное количество дней. К примеру, дата № 1 - 15.02.2019. Дата № 2 - 17.03.2019.
Вышеуказанные способы покажут ровное количество дней от 15.02.2019 до 17.03.2019, то есть 30 дней. А мне нужна разница вида: 1 месяц и 2 дня.
Тупо делить количество дней на 30, чтобы получить месяцы, я так понимаю, что мне не подходит. К примеру, в феврале 28 дней и даты посчитаются неверно.
В связи с этим, я хотел спросить - существуют ли стандартные функции, классы для решения моей проблемы, чтобы не придумывать заново велосипед, или все-таки придется самому все считать?

Заранее спасибо!
Ответ:
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
 Integer Mounth_Itog = 0;
        Integer Day_Itog = 0;
        Integer VisokFevral;
        String M_Razdelitel_D1[] = new String[2];
        String M_Razdelitel_D2[] = new String[2];
        String Date1 = "15-02-2019";
        String Date2 = "13-03-2019";
 
 
 
 
        M_Razdelitel_D1 = Date1.split("-");
        M_Razdelitel_D2 = Date2.split("-");
 
        int Day_1 = Integer.parseInt(M_Razdelitel_D1[0]);
        int Mounth_1 = Integer.parseInt(M_Razdelitel_D1[1]);
        int Year_1 = Integer.parseInt(M_Razdelitel_D1[2]);
 
        int Day_2 = Integer.parseInt(M_Razdelitel_D2[0]);
        int Mounth_2 = Integer.parseInt(M_Razdelitel_D2[1]);
        int Year_2 = Integer.parseInt(M_Razdelitel_D2[2]);
 
 
 
 
            GregorianCalendar c1 = new GregorianCalendar();
            if (c1.isLeapYear(Year_1) == true) {
                VisokFevral = 29;
            }else{
                VisokFevral = 28;
            }
 
 
            if(Year_1 == Year_2){
                if (Mounth_1 < Mounth_2){
                    Mounth_Itog = Mounth_2 - Mounth_1;
                    if (Day_1<Day_2){
                        Day_Itog = Day_2 - Day_1;
                    } else if (Day_1 > Day_2){
                        Mounth_Itog--;
                        if ((Mounth_2 - 1) == 2){
                            Day_Itog = VisokFevral - (Day_1-Day_2);
                        } else if ((Mounth_2 - 1) == 1 || (Mounth_2 - 1) == 3 || (Mounth_2 - 1) == 5 || (Mounth_2 - 1) == 7 || (Mounth_2 - 1) == 8 || (Mounth_2 - 1) == 10 || (Mounth_2 - 1) == 12 ){
                            Day_Itog = 31 - (Day_1-Day_2);
                        } else {
                            Day_Itog = 30 - (Day_1-Day_2);
                        }
 
                    }
                }
 
 
 
 
            }
 
 
        System.out.println(String.valueOf(Mounth_Itog.toString()));
        System.out.println(String.valueOf(Day_Itog.toString()));
Млин, набил... но только для условия, что год одинаковый, и дата вторая меньше первой. Понятно, что код корявый (от меня - новичка), ну, а что делать... В общем-то и остальные все условия можно набить, НО я честно удивлен, что таких подсчетов нет ни Calendar, Date, JodaTime.
Думал, это все уже набито кем-то по-любому. Искреннее Спасибо ExFau$t и Pablito за помощь!!!
Вопрос: Использование фрагмента в качестве временного хранилища данных

Коллеги,здравствуйте.
Есть необходимость в создании временного хранилища для объектов(На время жизни приложения).
Меня интересует, можно ли для этой цели использовать некий Fragment, который будет принимать данные от Intent и сохранять их в свои переменные экземпляра, чтобы в дальнейшем я мог обратиться к этому фрагменту и взять нужные мне данные?
Ответ: Rembo88, используйте Application instance.

1. Создаём класс:

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TheApplication extends Application {
    private static TheApplication instance;
    public Object someObject;
 
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
   } 
 
   public static TheApplication getInstance() {
        return intance;
    }
}
2. Не забываем дописать его в manifest в тэге application с параметром name.

3. Используем

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
TheApplication.getInstance().someObject = myObject;
///...............
Object myObject = TheApplication.getInstance().someObject;
P.S. вместо Object используйте свои типы
P.P.S писал код на коленке, так что внимательно. + замените прямой public доступ к переменной на getter/setter

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