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

Получение данных с сервера, длинные запросы - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как правильно сохранять/восстанавливать данные из Bundle http://www.cyberforum.ru/android-dev/thread1774756.html
Доброго дня. Не могу точно разобраться где вызывать сохранение данных в Bundle и извлечение их оттуда. В Активити есть поле ImageView куда я получаю фото с камеры. И при повороте экрана это поле...
Программирование Android Передать параметр из одной в другую Добрый вечер. Тут небольшая проблема. Как передать (ID) - С одной AppCompatActivity в Fragment. Ну принцип такой же как на Intent Intent i = new Intent(getActivity(), ID.class); ... http://www.cyberforum.ru/android-dev/thread1774744.html
Сервер для приложения на Android Программирование Android
чи для приложения на андроид нужен сервер
Как правильно использовать LeakCanary? Программирование Android
как правильно использовать LeakCanary, чтобы можно было определять утечки во всем приложении, а не только утечки активити?
Программирование Android Как создать spinner внутри recycler view? http://www.cyberforum.ru/android-dev/thread1774665.html
необходимо реализовать выпадающий список внутри recycler view. может, кто сталкивался с подобным или есть идеи, как это можно сделать, буду благодарен за помощь)
Программирование Android Android cordova response Всем привет! Кто сталкивался с подобным, подскажите плиз как решить! Есть приложение на html5/angular. Через Сordova требуется получить разные файлы для разных мобильных ОС(Android, iOS). Получаем,... подробнее

Показать сообщение отдельно
opanasa
0 / 0 / 0
Регистрация: 12.12.2015
Сообщений: 15
05.07.2016, 22:50  [ТС]
По логике в коде он коннектится раз в 15 сек и получает данные.
А закрыв соединение, в ansver записаны строки с новыми данными с сервера, раскидывает jsonarray и отправляет всё это в другое активити. далее ждет 15 сек и заново коннект, инпутстрим и т.д.
Все это висит в памяти и опрашивает сервер.
Не знаю поможет ли более полный код:
Кликните здесь для просмотра всего текста
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.util.Log;
 
public class FoneService extends Service {
 
    // ИМЯ СЕРВЕРА (url зарегистрированного нами сайта)
    String server_name = "http://mysite.ru";
    
    SQLiteDatabase chatDBlocal;
    HttpURLConnection conn;
    Cursor cursor;
    Thread thr;
    ContentValues new_mess;
    Long last_time; // время последней записи в БД, отсекаем по нему что нам
                    // тянуть с сервера, а что уже есть
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
    public void onStart(Intent intent, int startId) {
 
        Log.i("chat", "+ FoneService - запуск сервиса");
 
        chatDBlocal = openOrCreateDatabase("chatDBlocal.db",
                Context.MODE_PRIVATE, null);
        chatDBlocal
                .execSQL("CREATE TABLE IF NOT EXISTS chat (_id integer primary key autoincrement, author, client, data, text)");
 
        // создадим и покажем notification
        // это позволит стать сервису "бессмертным"
        // и будет визуально видно в трее
        Intent iN = new Intent(getApplicationContext(), MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pI = PendingIntent.getActivity(getApplicationContext(),
                0, iN, PendingIntent.FLAG_CANCEL_CURRENT);
        Notification.Builder bI = new Notification.Builder(
                getApplicationContext());
 
        bI.setContentIntent(pI)
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(
                        BitmapFactory.decodeResource(getApplicationContext()
                                .getResources(), R.drawable.ic_launcher))
                .setAutoCancel(true)
                .setContentTitle(getResources().getString(R.string.app_name))
                .setContentText("работаю...");
 
        Notification notification = bI.build();
        startForeground(101, notification);
 
        startLoop();
    }
 
    // запуск потока, внутри которого будет происходить
    // регулярное соединение с сервером для чтения новых
    // сообщений.
    // если сообщения найдены - отправим броадкаст для обновления
    // ListView в ChatActivity
    private void startLoop() {
 
        thr = new Thread(new Runnable() {
 
            // ansver = ответ на запрос
            // lnk = линк с параметрами
            String ansver, lnk;
 
            public void run() {
 
                while (true) { // стартуем бесконечный цикл
 
                    // глянем локальную БД на наличие сообщщений чата
                    cursor = chatDBlocal.rawQuery(
                            "SELECT * FROM chat ORDER BY data", null);
 
                    // если какие-либо сообщения есть - формируем запрос
                    // по которому получим только новые сообщения
                    if (cursor.moveToLast()) {
                        last_time = cursor.getLong(cursor
                                .getColumnIndex("data"));
                        lnk = server_name + "/chat.php?action=select&data="
                                + last_time.toString();
 
                        // если сообщений в БД нет - формируем запрос
                        // по которому получим всё
                    } else {
                        lnk = server_name + "/chat.php?action=select";
                    }
 
                    cursor.close();
 
                    // создаем соединение ---------------------------------->
                    try {
                        Log.i("chat",
                                "+ FoneService --------------- ОТКРОЕМ СОЕДИНЕНИЕ");
 
                        conn = (HttpURLConnection) new URL(lnk)
                                .openConnection();
                        conn.setReadTimeout(10000);
                        conn.setConnectTimeout(15000);
                        conn.setRequestMethod("POST");
                        conn.setRequestProperty("User-Agent", "Mozilla/5.0");
                        conn.setDoInput(true);
                        conn.connect();
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    }
                    // получаем ответ ---------------------------------->
                    try {
                        InputStream is = conn.getInputStream();
                        BufferedReader br = new BufferedReader(
                                new InputStreamReader(is, "UTF-8"));
                        StringBuilder sb = new StringBuilder();
                        String bfr_st = null;
                        while ((bfr_st = br.readLine()) != null) {
                            sb.append(bfr_st);
                        }
 
                        Log.i("chat", "+ FoneService - полный ответ сервера:\n"
                                + sb.toString());
                        // сформируем ответ сервера в string
                        // обрежем в полученном ответе все, что находится за "]"
                        // это необходимо, т.к. json ответ приходит с мусором
                        // и если этот мусор не убрать - будет невалидным
                        ansver = sb.toString();
                        ansver = ansver.substring(0, ansver.indexOf("]") + 1);
 
                        is.close(); // закроем поток
                        br.close(); // закроем буфер
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    } finally {
                        conn.disconnect();
                        Log.i("chat",
                                "+ FoneService --------------- ЗАКРОЕМ СОЕДИНЕНИЕ");
                    }
 
                    // запишем ответ в БД ---------------------------------->
                    if (ansver != null && !ansver.trim().equals("")) {
 
                        Log.i("chat",
                                "+ FoneService ---------- ответ содержит JSON:");
 
                        try {
                            // ответ превратим в JSON массив
                            JSONArray ja = new JSONArray(ansver);
                            JSONObject jo;
 
                            Integer i = 0;
 
                            while (i < ja.length()) {
 
                                // разберем JSON массив построчно
                                jo = ja.getJSONObject(i);
 
                                Log.i("chat",
                                        "=================>>> "
                                                + jo.getString("author")
                                                + " | "
                                                + jo.getString("client")
                                                + " | " + jo.getLong("data")
                                                + " | " + jo.getString("text"));
 
                                // создадим новое сообщение
                                new_mess = new ContentValues();
                                new_mess.put("author", jo.getString("author"));
                                new_mess.put("client", jo.getString("client"));
                                new_mess.put("data", jo.getLong("data"));
                                new_mess.put("text", jo.getString("text"));
                                // запишем новое сообщение в БД
                                chatDBlocal.insert("chat", null, new_mess);
                                new_mess.clear();
 
                                i++;
 
                                // отправим броадкаст для ChatActivity
                                // если она открыта - она обновить ListView
                                sendBroadcast(new Intent(
                                        "by.andreidanilevich.action.UPDATE_ListView"));
                            }
                        } catch (Exception e) {
                            // если ответ сервера не содержит валидный JSON
                            Log.i("chat",
                                    "+ FoneService ---------- ошибка ответа сервера:\n"
                                            + e.getMessage());
                        }
                    } else {
                        // если ответ сервера пустой
                        Log.i("chat",
                                "+ FoneService ---------- ответ не содержит JSON!");
                    }
 
                    try {
                        Thread.sleep(15000);
                    } catch (Exception e) {
                        Log.i("chat",
                                "+ FoneService - ошибка процесса: "
                                        + e.getMessage());
                    }
                }
            }
        });
 
        thr.setDaemon(true);
        thr.start();
 
    }
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru