2016-01-09 26 views

Odpowiedz

10

Spróbuj poniżej kod, aby uzyskać json z URL

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget= new HttpGet(URL); 

HttpResponse response = httpclient.execute(httpget); 

if(response.getStatusLine().getStatusCode()==200){ 
    String server_response = EntityUtils.toString(response.getEntity()); 
    Log.i("Server response", server_response); 
} else { 
    Log.i("Server response", "Failed to get server response"); 
} 
+3

Gdzie znaleźć HttpClient? Który pakiet mam dołączyć? – Tarion

+2

@ Tarion wystarczy dodać' useLibrary 'org.apache.http.legacy'' w pliku build.gradle poziomu aplikacji w 'android' blok powyżej 'defaultConfig'. –

0
try { 
      String line, newjson = ""; 
      URL urls = new URL(url); 
      try (BufferedReader reader = new BufferedReader(new InputStreamReader(urls.openStream(), "UTF-8"))) { 
       while ((line = reader.readLine()) != null) { 
        newjson += line; 
        // System.out.println(line); 
       } 
       // System.out.println(newjson); 
       String json = newjson.toString(); 
       JSONObject jObj = new JSONObject(json); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
24

Użyj tej funkcji, aby uzyskać JSON z adresu URL.

public static JSONObject getJSONObjectFromURL(String urlString) throws IOException, JSONException { 
    HttpURLConnection urlConnection = null; 
    URL url = new URL(urlString); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setReadTimeout(10000 /* milliseconds */); 
    urlConnection.setConnectTimeout(15000 /* milliseconds */); 
    urlConnection.setDoOutput(true); 
    urlConnection.connect(); 

    BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); 
    StringBuilder sb = new StringBuilder(); 

    String line; 
    while ((line = br.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    br.close(); 

    String jsonString = sb.toString(); 
    System.out.println("JSON: " + jsonString); 

    return new JSONObject(jsonString); 
} 

Nie zapomnij dodać uprawnienie do Internetu w swoim oczywistym

<uses-permission android:name="android.permission.INTERNET" />

następnie używać go tak:

try{ 
     JSONObject jsonObject = getJSONObjectFromURL(urlString); 
     // 
     // Parse your json here 
     // 
} catch (IOException e) { 
     e.printStackTrace(); 
} catch (JSONException e) { 
     e.printStackTrace(); 
} 
+2

Nicea rozwiązanie, nie wymaga importowania klienta HTTP apache! – Jlange

+0

Co najmniej dwa główne błędy tutaj. 1. 'urlConnection.setDoOutput (true);' zmienia żądanie do metody 'POST'. 2. Skutecznie wykonuje dwa żądania, 'new InputStreamReader (url.openStream()' otwiera 'url' raz jeszcze, pomijając' urlConnection' i wszystkie jego właściwości. 3. 'sb.append (line +" \ n ")' konstruuje nadmiar 'String'. –