2017-02-15 2 views
1

Ich versuche, JSON-Datei von URL mit diesem follwing Code herunterzuladen,Veralteter HttpClient?

try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(url); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 

    } catch (Exception e) { 
     Log.e("log_tag", "Error in http connection " + e.toString()); 
    } 

Allerdings zeigt Android Studio, dass Httpclient, DefaultHttpClient, Httppost depricated ist. Ich habe versucht, für alle oben genannten veralteten Optionen und so viele andere Variationen zu googlen, wie ich mir vorstellen kann und kann keine nützlichen Ergebnisse finden, so dass ich offensichtlich etwas vermisse.

, was der richtige Weg ist, JSON-Datei von URL

+0

verwenden Ja HttpClient ist veraltet. Sie können HttpUrlConnection oder jede gute Drittanbieter-Bibliothek wie Volley oder Retrofit etc. –

+0

verwenden Volley-Bibliothek http://www.androidhive.info/2014/05/android-working-with-volley-library-1/ –

+0

Sie könnten verwenden jede restAPI-Bibliothek wie Volley, OKHttp oder asynttpclient. Und wenn Sie wirklich Ihren eigenen Weg zum Abrufen von Json verwenden möchten, dann könnten Sie die OpenUrlConnection-Klasse für diese verwenden. Hoffe es wird dir helfen. –

Antwort

0

zum Download Wenn Sie nichts dagegen haben, mit Gson

String someUrl = "http://freegeoip.net/json/"; 

URL url = new URL(someUrl); 
HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
request.connect(); 

JsonParser jp = new JsonParser(); 
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); 
JsonObject rootobj = root.getAsJsonObject(); 
someProperty= rootobj.get("some_property").getAsString(); 
0
These are few workarounds; 

    1) Android 6.0 release removes support for the Apache HTTP client. If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead. This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption. 
    To continue using the Apache HTTP APIs, you must first declare the following compile-time dependency in your build.gradle file: 

    android 
    { 
     useLibrary 'org.apache.http.legacy' 
    } 

    Following is the link for your reference: 
    https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#boringSSL 
    2) If you have considerable amount of time to make changes, there are few third party open source libraries available out there such as retrofit (written by Square: https:/square.github.io/retrofit/) , volley(written by Google) which are much compact, efficient and easy to use. 
Hope this helps. Happy Coding. 
1
use this HttpClient httpClient = HttpClientBuilder.create().build(); 

oder Sie können

import android.util.Log; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.HashMap; 

public class JSONParser { 

    String charset = "UTF-8"; 
    HttpURLConnection conn; 
    DataOutputStream wr; 
    StringBuilder result; 
    URL urlObj; 
    JSONObject jObj = null; 
    StringBuilder sbParams; 
    String paramsString; 

    public JSONObject makeHttpRequest(String url, String method, 
             HashMap<String, String> params) { 

     sbParams = new StringBuilder(); 
     int i = 0; 
     for (String key : params.keySet()) { 
      try { 
       if (i != 0){ 
        sbParams.append("&"); 
       } 
       sbParams.append(key).append("=") 
         .append(URLEncoder.encode(params.get(key), charset)); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
      i++; 
     } 

     if (method.equals("POST")) { 
      // request method is POST 
      try { 
       urlObj = new URL(url); 

       conn = (HttpURLConnection) urlObj.openConnection(); 

       conn.setDoOutput(true); 

       conn.setRequestMethod("POST"); 

       conn.setRequestProperty("Accept-Charset", charset); 

       conn.setReadTimeout(10000); 
       conn.setConnectTimeout(15000); 

       conn.connect(); 

       paramsString = sbParams.toString(); 

       wr = new DataOutputStream(conn.getOutputStream()); 
       wr.writeBytes(paramsString); 
       wr.flush(); 
       wr.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     else if(method.equals("GET")){ 
      // request method is GET 

      if (sbParams.length() != 0) { 
       url += "?" + sbParams.toString(); 
      } 

      try { 
       urlObj = new URL(url); 

       conn = (HttpURLConnection) urlObj.openConnection(); 

       conn.setDoOutput(false); 

       conn.setRequestMethod("GET"); 

       conn.setRequestProperty("Accept-Charset", charset); 

       conn.setConnectTimeout(15000); 

       conn.connect(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

     try { 
      //Receive the response from the server 
      InputStream in = new BufferedInputStream(conn.getInputStream()); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
      result = new StringBuilder(); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       result.append(line); 
      } 

      Log.d("JSON Parser", "result: " + result.toString()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     conn.disconnect(); 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(result.toString()); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON Object 
     return jObj; 
    } 
}