#java #android #http #get #httpurlconnection
Нужно получить результат GET запроса в Android и вернуть значение из метода. Решено! Всем спасибо за участие! public void sayHello(View view)throws IOException { Thread httpThread = new Thread(new Runnable() { public void run() { String mybla = sendGet(); } }); httpThread.start(); } private String sendGet(){ try{ String mystr = "http://www.pravda.com.ua"; URL obj = new URL(mystr); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("User-Agent", "Mozilla/5.0"); con.setRequestProperty("Accept-Charset", "UTF-8"); InputStream response = con.getInputStream(); Scanner s = new Scanner(response).useDelimiter("\\A"); String result = s.hasNext() ? s.next() : ""; return result; } catch (Exception e) { return e.toString(); } }
Ответы
Ответ 1
Все делаете правильно. Для того, чтобы прочитать поток и получить из него String, можете воспользоваться, например, библиотекой Apache commons IOUtils (офф. сайт). С её помощью: String result = IOUtils.toString(inputStream); Если предпочетаете способ без сторонних библиотек (что я приветствую, потому что это позволяет узнать что-то новое о языке, в котором вы новичек), то делайте например так: Scanner s = new Scanner(inputStream).useDelimiter("\\A"); String result = s.hasNext() ? s.next() : ""; UPD: Заверните в new Thread(new Runnable() { public void run() { //вызовите ваш код для сетевого запроса } }).start(); Когда ваш запрос вернул результат внутри вашего Thread, чтобы поменять элемент интерфейса вам понадобится сделать это из UI-потока. Для этого используйте Context.runOnUiThread();.Ответ 2
Код с использованием либы OkHttp OkHttpClient client = new OkHttpClient.Builder().build(); String url = ...; Request.Builder request = new Request.Builder(); request.url(url); request.get(); Response response = client.newCall(request.build()).execute(); String response = response.body().string(); System.out.println(response ); Надо помнить, что на андроид запросы в сеть можно с API14 делать только вне UI потока. Например через AsynkTask, Thread etc
Комментариев нет:
Отправить комментарий