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

Всем привет, не могу разобраться с HttpUrlConnection, написал код по рекомендациям Android и что-то работает не так.
По порядку.
1) Есть задача, нужно на rest послать Json файл.
код сборки Json файла
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
JSONObject jsonObject = new JSONObject();
jsonObject.put("problem_id", 3);
jsonObject.put("comment", "Описание проблемы");
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy - hh:mm");
jsonObject.put("request_date", format.format(new Date()));
JSONArray jsonArray = new JSONArray();
jsonArray.put(43.2477689);
jsonArray.put(76.932101);
jsonObject.put("geom", jsonArray);
// беру из Bitmap картинку в виде массива байт.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
Далее вызываю метод для отправки Json файла и картинки
Код 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
HttpURLConnection http = null;
        try {
            URL url = new URL("ссылка на rest");
            http = (HttpURLConnection) url.openConnection();
            http.setRequestMethod("GET");
            http.setDoOutput(true);
            http.setDoInput(true);
            http.setChunkedStreamingMode(0);
            Log.d("JSON", "*****");
            DataOutputStream outputStream = new DataOutputStream(http.getOutputStream());
            outputStream.writeUTF(jsonObject.toString());
            // b это массив byte, содержащий картинку.
            outputStream.write(b,0,b.length);
            outputStream.flush();
            // получаю ответ с rest
            BufferedInputStream buf = new BufferedInputStream(http.getInputStream());
            String s = "";
            int i;
            i=buf.read();
            while (i!=-1){
                s+=(char)i;
            }
            Log.d("JSON",s);
        }finally {
            if (http != null) {
                http.disconnect();
                Log.d("JSON","finally");
            }
        }
проблема в том, что в консоль выводится
Код JSON
1
{"comment":"Описание проблемы","geom":[43.2477689,76.932101],"request_date":"08.10.2015 - 05:04","problem_id":3}
JSON﹕ *****
JSON﹕ finally
Т.е. строчка
Код Java(TM) 2 Platform Standard Edition 5.0
1
DataOutputStream outputStream = new DataOutputStream(http.getOutputStream());
не срабатывает.
Прошу помощи, уже весь интернет перелазил и не могу найти решение.
Ответ: Mikalai, Если честно, то хочется разобраться именно с этим.

Добавлено через 8 минут
Интересует еще один вопрос, я отправил данные на rest и он мне должен вернуть ответ, как прочитать данный ответ, то как я это реализовал выкидывает ошибку "java.io.FileNotFoundException: http://eip.geoportal.kz:8080/eip/api"
Вопрос: Использование HttpURLConnection

Всем привет. замечаю странное поведение коннекта к локальному серваку - который реально всегда доступен по вай фаю.
Запросы делаются раз в 2-3 сек. Периодически (примерно раз в 5 минут) возникает подряд несколько exception
такого вида

java.net.ConnectException: failed to connect to /192.168.1.2(port 80) after 8000ms: connect failed: ENETUNREACH (Network is unreachable)

и такое

ava.net.ConnectException: failed to connect to /192.168.1.2 (port 80) after 8000ms: isConnected failed: ECONNREFUSED (Connection refused)

понятно что по таймауту отваливается соединение - но (Network is unreachable) и (Connection refused) - почему разное и что это может быть реально, если учесть что вай фай работает и сервак работает без сбоев

Добавлено через 3 часа 50 минут
Нашел причину таймаута - она в самом андроиде: то есть я взял и из девайса в этой же сетке пинговал андроид смарт и другую виндовую машину. У винды не одного таймаута и отклик 1-100 мс, у андорида - таймауты каждые 20-30 сек и отклик 20-1000 мс.
кто нить знает ответ почему так плохо у андроида с сеткой?
Ответ: стоит zyxel ultra)))) комп от которого пингую через гигабит порт к роутеру коннектиться. мож аура плохая)))

Добавлено через 21 секунду
стоит zyxel ultra)))) комп от которого пингую через гигабит порт к роутеру коннектиться. мож аура плохая))). А что может с сеткой быть не так?
Вопрос: Не срабатывает код после цикла

вот полный код потока
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
class ClientThread implements Runnable {
 
        @Override
        public void run() {
 
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
                socket = new Socket(serverAddr, SERVERPORT);
                PrintWriter outprint = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                        true);
                //DataInputStream in;
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                //int read = 0;
                int read = 0;
                //in = new DataInputStream(socket.getInputStream());
               // out=new DataOutputStream(socket.getOutputStream());
                //out.writeInt(x);
                outprint.println(STX);
                //out.writeChar(STX);
                outprint.flush();
               // BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                char[] mData = new char[28];
 
 
                    while ((read = reader.read(mData)) > 0) {
                        synchronized (this) {
                            wait(3000);
                        }
                        // Thread.sleep(3000);
 
                        String str = String.valueOf(mData);
 
                        Log.d("Func", str);
                        Log.d("Func", "" + read);
                    }
                Log.d("Func", "Yes"); //                            этот код не срабатывает
 
 
 
                //String message = in.readUTF();
 
//                Toast toast = Toast.makeText(getApplicationContext(),
                       // message, Toast.LENGTH_SHORT);
              //  toast.show();
 
 
            } catch (UnknownHostException e1) {
                Log.d("Func", "Host");
                e1.printStackTrace();
            } catch (IOException e1) {
                Log.d("Func", "No");
                e1.printStackTrace();
            }
        catch (Throwable throwable) {
            Log.e("Func", "No1");
            throwable.printStackTrace();
        }/*catch (InterruptedException e) {
                e.printStackTrace();
            }*/ /*catch (InterruptedException e) {
                Log.d("Func", "Interrupt");
                e.printStackTrace();
            }*/
 
        }
 
    }
Log.d("Func", str);
Log.d("Func", "" + read); срабатывает а Log.d("Func", "Yes");. Подскажите почему такое происходит? Как можно исправить? Ни один catch не срабатывает, в чем может быть проблема? Поток запускается в методе onCreate() активити.
Ответ: А еще новичок в программировании, и с сокетами не работал, так что точно не знаю как срабатывает socket.setSoTimeout. Это надо экспериментальным путем выяснить. Может покажусь совсем зеленым дилетантом, но может какую-нибудь завершающую последовательность данных отправлять, а при нахождении данной последовательности, прекращать чтение данных.
Вопрос: Как отправить данные json через HttpURLConnection

Здравствуйте!
Мне нужно работать с АПИ из приложения.
Использую HttpURLConnection

Код

  URL url = new URL(apiHost);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setReadTimeout(5000);
            c.setRequestProperty("api_key", apiKey);
            c.connect();


Но как мне отправить данные вида json в теле не могу разобраться?

Спасибо!

Ответ:
Здравствуйте!
Мне нужно работать с АПИ из приложения.
Использую HttpURLConnection

Код

  URL url = new URL(apiHost);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setReadTimeout(5000);
            c.setRequestProperty("api_key", apiKey);
            c.connect();


Но как мне отправить данные вида json в теле не могу разобраться?

Спасибо!

Вопрос: HttpURLConnection запрос

Делаю запрос на сервер
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
public class AsyncTaskc extends AsyncTask<Void, String, String> {
 
    private String urls;
 
    public AsyncTaskc(String url) {
        urls = url;
    }
 
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
 
    @Override
    protected String doInBackground(Void... voids) {
        BufferedReader reader = null;
        StringBuilder buf = new StringBuilder();
        try {
            URL url = new URL(urls);
            HttpURLConnection c = (HttpURLConnection)url.openConnection();
            c.connect();
            reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
            String line=null;
 
            while ((line = reader.readLine()) != null) {
                buf.append(line);
            }
            //c.disconnect();
            Log.e("asynk", buf.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buf.toString();
    }
 
    @Override
    protected void onCancelled() {
        super.onCancelled();
    }
}
На сервере данные возвращаются в json формате, если перейти на страницу все отображается.
В логах строка которая должна вернуться она не полная, почему это происходит?
Ответ:
Сообщение от Паблито
какую ошибку тоже надо телепатически догадаться?
ошибку не было видно так как строка обрезалась до 4096 символов.
А ошибка была в том что я пытался обратится к объекту json, а приходил массив в котором были объекты.
Всем спасибо за быстрые ответы!
Вопрос: Ребрендинг оси андроид (Android OS)

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

Добавлено через 42 минуты
вопрос в принципе такой
какой опенсорсе андроид можно использовать ? ?
Ответ:
Сообщение от php717
хочу создать свою операционную систему на остнове операцинной системы андроид
тоесть создать свой билд андроида.
Отпишись когда/если что-нибудь получится!

ИМХО это ОЧЕНЬ сложно! Проблема не только в знании необходимого для адаптации андроида "под себя", но и умение НАПИСАТЬ ДРАЙВЕРА под СВОЕ оборудование! Можно попробовать написать прошивку под определенное устройство (Самсунг под свои устройства МНОГО высококачественных человеко-часов тратят). Например "стандартный андроид" не знает что такое двухсимочник! Китайцы свою версию андроида разработали под них... А Самсунг свою версию... По умолчанию не знают что такое "радио" - не находил нигде API для управления... думаю еще сотня проблем будет...
Вопрос: Переход C# на Андроид

В институте учили C++ builder. Потом самостоятельно освоил C#.net. Хорошо знаю ООП. Ранее занимался скриптингом под Unity3d.
Сейчас заинтересовала мобильная разработка приложений. Как побыстрее переучиться на Джаву и Андроид Студио? Чтобы не осваивать совсем с нуля базовые понятия. Сколько на это времени уйдет?
Ответ: Смотря в какой степени изучить. По широте охвата и глубине изучения каждой темы.

Курс StartAndroid не подойдет.
Изучать надо сначала Java отдельно, потом Андроид.

Java по сравнению с C# язык упрощённый и ограниченный.
И для Андроида его не нужно изучать полностью.
Например в Java есть свои библиотеки GUI. Для андроида они не нужны.
Ряд тем не обязательны для изучения, их можно отложить на потом.
(и нужно отложить я считаю). Например - лямбды, рефлексия, аннотации.

В книге всё нужное уложится страниц в 200-300. Времени нужно (условно)
от 2-х недель. Может 3 или 4. Если всё время этому уделять.

Кроме языка для Андроида нужно (желательно) знать ООП и паттерны ООП.

А потом уже за андроид браться.
Вопрос: Первая простая полезная программа для андроид

Добрый День как вы смотрите на идею написать первую программу под андроид(чтобы потренироваться) такую: например есть сайт банка с оф курсом валют, и чтобы в приложении на андроиде при наличии интернета показывались эти курсы валют. ЧТо думаете по этому поводу?
Ответ:
Добрый День как вы смотрите на идею написать первую программу под андроид(чтобы потренироваться) такую: например есть сайт банка с оф курсом валют, и чтобы в приложении на андроиде при наличии интернета показывались эти курсы валют. ЧТо думаете по этому поводу?
Вопрос: Андроид приложение. совет

Здравствуйте. Подскажите, сложно ли написать приложение на андроид? и какие языки для этого именно нужно знать? с чем работать? просто, есть очень выгодное предложение, необходимо создать примерно за 4 месяца бизнес приложение , но сначала бета версию. Стоит ли за это вообще браться? до этого я работал с сайтами, есть знания языков - html,css,php,jquery и т.д., также небольшие познания в делфи.
Ответ: под андроид в классическом варианте пишут на java, если что-то сложное пишут на С, извращенцы умудряются писаться на руби, дельфи и т.д.

сложно ли писать? ну как тебе сказать, после веба будет сложновато имхо. ибо тут ООП, и тоже весьма извращенное.

работать советую с андроид студио.


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

Здравствуйте меня зовут Владимир и я уже достаточно давно занимаюсь программированием. С недавнего времени я хочу начать заниматься разработкой под андроид, но вот проблема в том что девайса на андроид у меня нету. После того как я приобрел раритетный Iphone 2G я посчитал что мне мой Samsung Galaxy s2 больше не нужен и после нескольких экспериментов над ним от него мало что осталось.

Хотел спросить можно ли разработать нормальное android приложение на unity тестируя его на каком нибудь android эмуляторе под windows и загрузить его в плей маркет. Я бы конечно занялся программированием под ios но на моем Iphone 2G стоит прошивка IOS 1.0 в которой даже AppStore нету.
Ответ: а что для вас нормальное приложение?
моделей телефонов с андроидом мульон, пока все не будете иметь и не протестируете на каждом,
никакой гарантии нет что везде будет правильно работать нет