#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
Комментариев нет:
Отправить комментарий