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

get запросы - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
objaa
41 / 41 / 7
Регистрация: 06.07.2011
Сообщений: 352
01.10.2012, 21:02     get запросы #1
Всем привет!
Не хочет отправляться гет запрос на сервер
Что могло стать причиной этого?Разрешения?
Код:
Java
1
2
3
4
5
6
7
8
9
10
URL myURL = new URL("http://www.mysite.com/ru/"); //Сайт естественно другой
            InputStream dataStream = myURL.openConnection().getInputStream();
            InputStreamReader isr = new InputStreamReader(dataStream, "UTF-8");
            StringBuffer data = new StringBuffer();
            int c;
            while ((c = isr.read()) != -1){
                   data.append((char) c);
            }
            String resultString = new String (data.toString());
showDialog(resultStringP); //Мой метод для вывода пришедшего сообщения
Java
1
2
3
4
5
6
7
8
private void showDialog(String m)
    {        
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setTitle("title");
        dialogBuilder.setMessage(m);
        AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.show();
    }
Выскакивает просто пустой диалог (следовательно запрос даже не уходил?)
Ставил брекпоинты на передачу resultStringP, но почему-то они не срабатывали :\
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.10.2012, 23:11     get запросы #2
Page Not Found - 404 Error Page
The page you are looking for (http://mysite.com/ru/) is not here.

может в этом проблема?
objaa
41 / 41 / 7
Регистрация: 06.07.2011
Сообщений: 352
02.10.2012, 15:59  [ТС]     get запросы #3
V0v1k, это не причем, я просто убрал сайт к которому выполняется запрос.
Туда какой сайт не подставь все равно 0 ответ
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.10.2012, 18:43     get запросы #4
у меня такой код работает

Java
1
2
3
4
5
6
7
8
9
10
11
URL url = new URL("http://informer.gismeteo.ru/xml/27612.xml");
InputStream inputStream = url.openStream();
///////////////////////
 
String convertStreamToString(InputStream is) {
        try {
            return new Scanner(is).useDelimiter("\\A").next();
        } catch (java.util.NoSuchElementException e) {
            return "";
        }
}
objaa
41 / 41 / 7
Регистрация: 06.07.2011
Сообщений: 352
02.10.2012, 23:14  [ТС]     get запросы #5
V0v1k, вылетает программа
Что же я делаю не так?
Полный код main_activity.java файла:

Кликните здесь для просмотра всего текста
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
package com.example.helloworld;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
    Button b;
    //InputStream inputStream;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        b = (Button) findViewById(R.id.bGet);
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub                  
                try {
                    URL url = new URL("http://informer.gismeteo.ru/xml/27612.xml");
                    InputStream inputStream = url.openStream();
                    showDialog(convertStreamToString(inputStream));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    showDialog(e.getMessage());
                }
            }           
        });
    }
 
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
    private void showDialog(String m)
    {        
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setTitle("nyan :3");
        dialogBuilder.setMessage(m);
        AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.show();
    }
    
    String convertStreamToString(InputStream is) {
        try {
            return new Scanner(is).useDelimiter("\\A").next();
        } catch (java.util.NoSuchElementException e) {
            return "error";
        }
    }
}


Лог ошибки из логкэта:

Кликните здесь для просмотра всего текста

Код
10-02 23:10:37.494: I/Process(20319): Sending signal. PID: 20319 SIG: 9
10-02 23:10:41.267: E/Trace(20368): error opening trace file: No such file or directory (2)
10-02 23:10:41.271: D/ActivityThread(20368): setTargetHeapUtilization:0.25
10-02 23:10:41.271: D/ActivityThread(20368): setTargetHeapIdealFree:8388608
10-02 23:10:41.271: D/ActivityThread(20368): setTargetHeapConcurrentStart:2097152
10-02 23:10:41.314: D/skia(20368): new locale ru_RU
10-02 23:10:41.420: D/libEGL(20368): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
10-02 23:10:41.424: D/libEGL(20368): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
10-02 23:10:41.427: D/libEGL(20368): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
10-02 23:10:41.525: D/OpenGLRenderer(20368): Enabling debug mode 0
10-02 23:10:45.060: D/AndroidRuntime(20368): Shutting down VM
10-02 23:10:45.060: W/dalvikvm(20368): threadid=1: thread exiting with uncaught exception (group=0x411bb300)
10-02 23:10:45.068: E/AndroidRuntime(20368): FATAL EXCEPTION: main
10-02 23:10:45.068: E/AndroidRuntime(20368): android.os.NetworkOnMainThreadException
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.net.InetAddress.getAllByName(InetAddress.java:214)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.net.URL.openStream(URL.java:462)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at com.example.helloworld.MainActivity$1.onClick(MainActivity.java:32)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.view.View.performClick(View.java:4084)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.view.View$PerformClick.run(View.java:16966)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.os.Handler.handleCallback(Handler.java:615)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.os.Handler.dispatchMessage(Handler.java:92)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.os.Looper.loop(Looper.java:137)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at android.app.ActivityThread.main(ActivityThread.java:4940)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at java.lang.reflect.Method.invoke(Method.java:511)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
10-02 23:10:45.068: E/AndroidRuntime(20368): 	at dalvik.system.NativeStart.main(Native Method)
10-02 23:10:46.834: I/Process(20368): Sending signal. PID: 20368 SIG: 9


мб таки необходимы разрешения?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.10.2012, 23:21     get запросы #6
http://developer.android.com/intl/ru...Exception.html
objaa
41 / 41 / 7
Регистрация: 06.07.2011
Сообщений: 352
02.10.2012, 23:35  [ТС]     get запросы #7
V0v1k, судя по описанию ошибки это для платформ ниже 3.0 (ака хонейкомб) а как же поступить с 4.* ?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.10.2012, 23:41     get запросы #8
Цитата Сообщение от objaa Посмотреть сообщение
это
что это?
obrazer
67 / 67 / 1
Регистрация: 04.09.2012
Сообщений: 170
04.10.2012, 17:09     get запросы #9
Судя по ошибке
Код
error opening trace file: No such file or
Ошибка возникает при обращении к потоку dataStream. А ошибка при обращении к потоку возникает потому как он не работоспособный или его нет вообще.
А это может случиться только по причине того, что отчет на запрос не получен.
В связи с этим, строку
Java
1
directoryInputStream dataStream = myURL.openConnection().getInputStream();
Необходимо разнести на две части:
1. Открытие коннекта
2. Получение стрима

Ввиду того, что URL у тебя HTTP-шный, то myURL.openConnection() возвращает объект HttpURLConnection, который в свою очередь имеет полезный метод - getResponseCode();
И в итоге имеем
Java
1
2
3
4
5
HttpURLConnection conn = hmyURL.openConnection();
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
    throw new Exception("http error : " + conn.getResponseCode());
}
directoryInputStream dataStream = conn.getInputStream()
Собственно, по генерируемуму исключению можно однозначно определить какая именно проблема в соединении

И, кстати, чуть не забыл - V0v1k абсолютно точно указал на возможную причину, а именно - соединения должны выполняться в отдельном от UI потоке. Необходимо вынести код соедиения в отделный поток.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.10.2012, 17:15     get запросы #10
Цитата Сообщение от obrazer Посмотреть сообщение
Судя по ошибке
Код Code
1
error opening trace file: No such file or
эта ошибка не имеет никакого отношения к крешу приложения да и вообще к коду приложения.
вот екзепшен -
Цитата Сообщение от objaa Посмотреть сообщение
android.os.NetworkOnMainThreadException
я дал ссылку где четко, черным по белому написано причину возникновения этого екзепшена.
не нужно ничего придумывать.
obrazer
67 / 67 / 1
Регистрация: 04.09.2012
Сообщений: 170
04.10.2012, 17:52     get запросы #11
Цитата Сообщение от V0v1k Посмотреть сообщение
вот екзепшен -
Ну таки я отметил, что абсолютно точно указана причина.

Цитата Сообщение от V0v1k Посмотреть сообщение
не нужно ничего придумывать.
Действительно, можно ничего не придумывать и в следующий раз получать Exception на отсутствующем Стриме, так и не узнав, чего отвечает сервер... Это и есть небезопасный код - источник новых тем на форумах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2012, 18:02     get запросы
Еще ссылки по теме:

SQLite Андроид эмулятор и Железо по разному обрабатывают запросы Android
Запросы между сайтом и приложением Android
Android Получение данных с сервера, длинные запросы
Android Лимит на запросы в Google Maps Directions API
Android Групповые сетевые запросы с задержкой

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

Или воспользуйтесь поиском по форуму:
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.10.2012, 18:02     get запросы #12
Цитата Сообщение от obrazer Посмотреть сообщение
Ну таки я отметил
сори, не заметил последнего предложения.


Цитата Сообщение от obrazer Посмотреть сообщение
Действительно, можно ничего не придумывать
я имел ввиду то, что вы указали на "error opening trace file: No such file or " как на причину креша...
Yandex
Объявления
04.10.2012, 18:02     get запросы
Ответ Создать тему
Опции темы

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