2016-04-27 14 views
-2

Ich brauche Hilfe beim Übertragen meines Codes vom http-Client zur http-URL-Verbindung, weil Android Studio den HTTP-Client nicht unterstützt und es mir weiterhin einen Fehler gibt. Ich benutze die Bing Faces API und diese API hat einige besondere Formatierung, die getan werden muss, wie das Senden einer Kopfzeile oder eines Körpers und ich weiß nicht, ob HTTP-URL-Verbindungen das unterstützt oder nicht.Ich bin in Android Studio und ich muss HTTP-URL-Verbindung statt httpclient verwenden. Wie konvertiere ich meinen Code?

package com.example.test.bingfacessimilar; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.utils.URIBuilder; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.util.EntityUtils; 

import java.net.HttpURLConnection; 
import java.net.URI; 
import java.net.URL; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     HttpClient httpclient = HttpClients.createDefault(); 

     try { 
      URL url = new URL("https://api.projectoxford.ai/face/v1.0/detect"); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestProperty("Content-Type", "application/json"); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 
      connection.setRequestMethod("POST"); 


      URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/face/v1.0/detect"); 

      builder.setParameter("returnFaceId", "true"); 
      builder.setParameter("returnFaceLandmarks", "true"); 
      builder.setParameter("returnFaceAttributes", "{string}"); 

      URI uri = builder.build(); 
      HttpPost request = new HttpPost(uri); 
      request.setHeader("Content-Type", "application/json"); 
      request.setHeader("Ocp-Apim-Subscription-Key", "77c634fea67944ad861e73ef737bba4b\n"); 


      // Request body 
      StringEntity reqEntity = new StringEntity("{\n" + "\"url\":\"http://tamildownloads.p4o.net/wp-content/uploads/2014/06/rajinipic.jpg?ckattempt=1\"\n" + "}"); 
      request.setEntity(reqEntity); 

      HttpResponse response = httpclient.execute(request); 
      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       System.out.println(EntityUtils.toString(entity)); 
      } 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Antwort

0

Es gibt keine einfache Möglichkeit, von httpclient zu http urlconnection zu wechseln. Sie müssen Ihren Code neu schreiben. Weitere Informationen finden Sie in der Dokumentation http://developer.android.com/reference/java/net/HttpURLConnection.html

Wenn Sie jedoch weiterhin httpclient verwenden möchten, gehen Sie folgendermaßen vor.

useLibrary 'org.apache.http.legacy' in Ihrer build.gradle Datei als unten-

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

hinzufügen Wenn dies nicht funktioniert das folgende

- Copy org.apache.http .legacy.jar, das sich in/platforms/android-23/optionalem Pfad Ihres Android SDK-Verzeichnisses zum App/libs-Ordner Ihres Projekts befindet.

- Fügen Sie jetzt Kompilierdateien ('libs/org.apache.http.legacy.jar') in den Abhängigkeiten {} - Abschnitt der build.gradle-Datei hinzu.