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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
#1

Пост запрос и обработка полученой иформации - Программирование Android

19.07.2012, 18:03. Просмотров 1865. Ответов 18
Метки нет (Все метки)

Есть пост запрос и затем обработка полученой инфы, снизу приведена меньшая часть
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
String str = null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://сайт");
 
        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("u", "android"));
            nameValuePairs.add(new BasicNameValuePair("p", "78"));
            nameValuePairs.add(new BasicNameValuePair("action", "get_events_by_object_id"));
            nameValuePairs.add(new BasicNameValuePair("object_id", AfishaIndex));
            nameValuePairs.add(new BasicNameValuePair("codepage", "utf8"));
            nameValuePairs.add(new BasicNameValuePair("template_id", "51762"));
            
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            
            HttpResponse response = httpclient.execute(httppost);
            
            str = EntityUtils.toString(response.getEntity());
            response.getEntity().consumeContent();          
            
                str = str.replaceAll("\\--", "-");
                str = str.replaceAll("\\---", "-");
                str = str.replaceAll("\\[Подробнее]", "");
                str = str.replaceAll("<(.)+?>", "");
                str = str.toString().replaceAll(":00", ":00  ");
                str = str.toString().replaceAll(":20", ":20  ");
                str = str.toString().replaceAll(":10", ":10  ");
                str = str.toString().replaceAll(":30", ":30  ");
                str = str.toString().replaceAll(":40", ":40  ");
                str = str.toString().replaceAll(":50", ":50  ");
                str = str.replaceAll("<(\n)+?>", "");
                str = str.replaceAll("  ", "");
выполняется все по нажатию кнопки, итог выводится на экран спустя 35 секунд после нажатия кнопки, как ускорить это???

если поможет то вот логи
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
07-19 17:58:30.432: I/ActivityManager(70): Displayed my.megamag.apps/.MenuActivity: +898ms
07-19 17:58:30.444: D/States(344): MainActivity: onStop()
07-19 17:58:31.562: I/ActivityManager(70): Starting: Intent { cmp=my.megamag.apps/.KinoteatrActivity } from pid 344
07-19 17:58:31.592: D/States(344): MenuActivity: onPause()
07-19 17:58:31.832: D/dalvikvm(344): GC_EXTERNAL_ALLOC freed 72K, 52% free 2635K/5379K, external 2057K/2137K, paused 102ms
07-19 17:58:41.585: W/ActivityManager(70): Launch timeout has expired, giving up wake lock!
07-19 17:58:41.632: W/ActivityManager(70): Activity idle timeout for HistoryRecord{40700978 my.megamag.apps/.KinoteatrActivity}
07-19 17:58:43.842: I/global(344): Loaded time zone names for en_US in 10906ms.
07-19 17:58:46.282: D/dalvikvm(344): GC_FOR_MALLOC freed 532K, 48% free 3470K/6663K, external 2687K/3003K, paused 207ms
07-19 17:58:48.392: D/dalvikvm(344): GC_CONCURRENT freed 1004K, 51% free 3601K/7303K, external 2833K/3003K, paused 8ms+11ms
07-19 17:58:48.982: D/dalvikvm(344): GC_EXTERNAL_ALLOC freed 820K, 60% free 2982K/7303K, external 2833K/3003K, paused 90ms
07-19 17:58:52.872: D/dalvikvm(344): GC_CONCURRENT freed 793K, 46% free 4148K/7559K, external 3272K/3767K, paused 18ms+8ms
07-19 17:58:56.562: D/dalvikvm(344): GC_CONCURRENT freed 1752K, 53% free 3974K/8391K, external 3715K/3767K, paused 9ms+9ms
07-19 17:58:57.952: D/dalvikvm(344): GC_EXTERNAL_ALLOC freed 1262K, 61% free 3303K/8391K, external 3715K/3767K, paused 111ms
07-19 17:59:03.792: D/dalvikvm(344): GC_CONCURRENT freed 1237K, 47% free 4461K/8391K, external 4393K/4867K, paused 9ms+12ms
07-19 17:59:05.503: D/States(344): MenuActivity: onStop()
07-19 17:59:06.932: I/ActivityManager(70): Displayed my.megamag.apps/.KinoteatrActivity: +35s323ms
07-19 18:02:12.606: D/SntpClient(70): request time failed: java.net.SocketException: Address family not supported by protocol
вот вродъ и суть моей проблемы...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
19.07.2012, 18:34     Пост запрос и обработка полученой иформации #2
-первое что приходит в голову это уменьшить количество replaceAll с помощью универсального регулярного выражения (как я вижу регулярка у вас есть значит вы понимаете о чем речь).
Так как чем меньше раз мы проходим по всему тексту, при каждом replace, тем выше скорость кода
-второе сколько времени у вас проходит со времени конетка к сайту до получения результата, возможно и здесь значительная задержка и к сожилению это вы врядли выличите

EDIT
ну и ни кто не отменял какой-нибудь лоадинг индикатор (например в статусь баре), чтоб пользователь пользователь видел что приложение "РАБОТАЕТ"
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
19.07.2012, 19:47     Пост запрос и обработка полученой иформации #3
странные реплейсы, сначала плодят отступы, потом их убирают...

узнайте сколько именно идет времени на ожидание ответа сервера и сколько на ваши реплейсы.
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
20.07.2012, 11:47  [ТС]     Пост запрос и обработка полученой иформации #4
реплейсы забирают только процентов 30 всего затраченого времени, на что еще может тратиться стольок времени???

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
Spanned stroka = Html.fromHtml(postData(index));
 
public String postData(int index) {
        
        String str = null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://mysyte.org");
 
        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("u", "android"));
            nameValuePairs.add(new BasicNameValuePair("p", "014"));
            nameValuePairs.add(new BasicNameValuePair("action", "get_object_info_by_id"));
            nameValuePairs.add(new BasicNameValuePair("object_id", TeatresIndex[index]));
            nameValuePairs.add(new BasicNameValuePair("codepage", "utf8"));
            nameValuePairs.add(new BasicNameValuePair("template_id", "51762"));
            
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            
            HttpResponse response = httpclient.execute(httppost);
            
            str = EntityUtils.toString(response.getEntity());
            response.getEntity().consumeContent();          
                
                /*str = str.replaceAll("TITLE_REGION_NAME", "Регион: ");
                str = str.replaceAll("TITLE_ADDRESS", "Адрес:");
                str = str.replaceAll("TITLE_TELEPHONE_AUTO", "Автоответчик: ");
                str = str.replaceAll("TITLE_TELEPHONE", "Телефон кассы:");
                str = str.replaceAll("TITLE_BOSS_TELEPHONE", "Телефон директора: ");
                str = str.replaceAll("TITLE_BOSS", "Директор:");               
                str = str.replaceAll("TITLE_TEMPLATE_COUNT", "Количество залов:");
                str = str.replaceAll("TITLE_DATE_OPEN", "Дата открытия:");
                str = str.replaceAll("TITLE_BAR_ASSORTIMENT", "Ассортимет бара:");
                str = str.replaceAll("TITLE_BAR_URL", "Адрес бара в сети Интернет:");
                str = str.replaceAll("TITLE_BAR", "Бар:");
                str = str.replaceAll("TITLE_SERVICES", "Дополнительные услуги:");
                str = str.replaceAll("TEXT_NOT_EXISTS", "Нет информации");
                str = str.replaceAll("TEXT_NO_INFORMATION", "Нет информации");
                str = str.replaceAll("<(.)+?>", "");
                str = str.replaceAll("<(\n)+?>", "");
                str = str.replaceAll("   ", "\n");
                str = str.replaceAll("  ", "");*/
                
                
        } catch (ClientProtocolException e) {
            
            Log.e("ERROR","MalformedURLException");
            
        } catch (IOException e) {
            
            Log.e("ERROR","IOException");
        }
        return str;
        
    }
на это тратится 24 секунды
вот логи
C
1
2
3
4
5
6
7
8
9
10
11
12
13
07-20 10:21:44.912: I/ActivityManager(70): Starting: Intent { cmp=my.megamag.apps/.KinoteatrActivity } from pid 581
07-20 10:21:44.942: D/States(581): MenuActivity: onPause()
07-20 10:21:45.182: D/dalvikvm(581): GC_EXTERNAL_ALLOC freed 67K, 52% free 2635K/5379K, external 2057K/2137K, paused 90ms
07-20 10:21:54.955: W/ActivityManager(70): Launch timeout has expired, giving up wake lock!
07-20 10:21:54.990: W/ActivityManager(70): Activity idle timeout for HistoryRecord{407e38c0 my.megamag.apps/.KinoteatrActivity}
07-20 10:21:55.662: I/global(581): Loaded time zone names for en_US in 9263ms.
07-20 10:21:59.842: D/dalvikvm(581): GC_CONCURRENT freed 579K, 49% free 3494K/6727K, external 2408K/3003K, paused 9ms+9ms
07-20 10:22:03.172: D/dalvikvm(581): GC_CONCURRENT freed 976K, 52% free 3540K/7239K, external 2408K/3003K, paused 8ms+11ms
07-20 10:22:05.712: D/dalvikvm(581): GC_FOR_MALLOC freed 1072K, 54% free 3359K/7239K, external 2408K/3003K, paused 76ms
07-20 10:22:05.742: D/dalvikvm(253): GC_EXPLICIT freed 6K, 54% free 2536K/5511K, external 1625K/2137K, paused 590ms
07-20 10:22:08.462: D/dalvikvm(581): GC_FOR_MALLOC freed 893K, 55% free 3274K/7239K, external 2408K/3003K, paused 71ms
07-20 10:22:09.152: D/States(581): MenuActivity: onStop()
07-20 10:22:09.752: I/ActivityManager(70): Displayed my.megamag.apps/.KinoteatrActivity: +24s797ms
Добавлено через 38 минут
именно здесь происходит самые длительные задержки
Java
1
HttpResponse response = httpclient.execute(httppost);
Если убрать параметры, которые передает пост запрос, то можно скоратить секунд 5-6, но на этом все, жду все равно долго...

Добавлено через 41 минуту
длительность ожидания результата от запроса зависит от количества получаемого текста,
тоесть если там буквально одно предложения то секунд 7, если побольше то уже и больше, как можно сократить это время??
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2012, 13:12     Пост запрос и обработка полученой иформации #5
Цитата Сообщение от Noit Посмотреть сообщение
как можно сократить это время
увеличить скорость своего интернета, увеличить скорость интернета на сервере этого сайта, увеличить мощность сервера этого сайта.
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
20.07.2012, 13:25  [ТС]     Пост запрос и обработка полученой иформации #6
может с самим запросом можно что-нибудь сделать? без изменения скоростей интернета и сервера
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2012, 13:40     Пост запрос и обработка полученой иформации #7
К сожалению, метод httpclient.fastExecute() еще не придумали)
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
20.07.2012, 13:44  [ТС]     Пост запрос и обработка полученой иформации #8
Цитата Сообщение от V0v1k Посмотреть сообщение
К сожалению, метод httpclient.fastExecute() еще не придумали)
а жаль)))

а альтернатива пост запросу может есть какая?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2012, 13:58     Пост запрос и обработка полученой иформации #9
нуууу, гет запрос, но на него сервер врятле будет быстрее отвечать.
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
20.07.2012, 14:12  [ТС]     Пост запрос и обработка полученой иформации #10
Цитата Сообщение от V0v1k Посмотреть сообщение
нуууу, гет запрос, но на него сервер врятле будет быстрее отвечать.
ззнаю, пробывал уже, как-то нужно что-то придумать, а то 30 секунд ждать не катит(
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2012, 14:25     Пост запрос и обработка полученой иформации #11
ну что тут придумаешь если сервер долго отвечает... пинка серверу для скорости выписать чтоль?
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
20.07.2012, 14:31     Пост запрос и обработка полученой иформации #12
ну есть еще HttpURLConnection и AndroidHttpClient
ну будет чудо, если что-то поменяеться

EDIT
вы работаете с реальным телефоном или эмулятором ???
и какой у вас конект (скорость) ???
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
20.07.2012, 16:42  [ТС]     Пост запрос и обработка полученой иформации #13
дело не в сервере, все так грузят, я пробывал

Добавлено через 5 минут
Цитата Сообщение от flashok Посмотреть сообщение
вы работаете с реальным телефоном или эмулятором ???
работаю с эмулятором

Цитата Сообщение от flashok Посмотреть сообщение
и какой у вас конект (скорость) ???
скорость хорошая

Добавлено через 19 минут
Добваил даже
Java
1
2
3
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);
но итога нет, снова 30 секунд

Добавлено через 1 час 26 минут
И еще при повороте экрана, поворачивается и заново загружается все снова эти 30 секунд, а нельзя ли сделать так, чтобы при повороте экрана, не перезагружалась активити заново??
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2012, 18:49     Пост запрос и обработка полученой иформации #14
Пересоздание активити при повороте экрана можно отключить установив атрибут android:configChanges="keyboardHidden|orientation" элемента activity в файле манифеста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2012, 10:34     Пост запрос и обработка полученой иформации
Еще ссылки по теме:
C# ASP.NET Многопоточный пост запрос
Не получается пост запрос Delphi
Принять пост запрос PHP БД
Пост запрос на сервер PHP
Spring REST'ful вебсервис: пост обработка Java EE

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

Или воспользуйтесь поиском по форуму:
Noit
26 / 26 / 3
Регистрация: 11.04.2012
Сообщений: 865
24.07.2012, 10:34  [ТС]     Пост запрос и обработка полученой иформации #15
Цитата Сообщение от V0v1k Посмотреть сообщение
Пересоздание активити при повороте экрана можно отключить установив атрибут android:configChanges="keyboardHidden|orientation" элемента activity в файле манифеста.
сделал , но сейчас при повороте картинка остается такой же не поворачивается(
Yandex
Объявления
24.07.2012, 10:34     Пост запрос и обработка полученой иформации
Ответ Создать тему
Опции темы

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