2016-04-18 3 views
1

Kürzlich In einem Projekt musste ich mit einer API von meinem Kollegen konfrontiert werden, die JSON-Arrays eines Objekts in der URL mit GET-Methode akzeptiert.Wie JSON-Array am Ende der URL in Android mit HttpURLConnection hinzufügen?

zum Beispiel der Aufruf von API ist

api.site.com/object/create/[{"id":1,"name":"Hello!"},{"id":2,"name":"World!"}] 

Diese URL perfekt mit Chrome funktioniert und die API gibt den Wert erwartet, der beispielsweise: [{"id":12501}]

Aber in Android, die Funktionen, die behandelt wirft ein java.net.SocketTimeoutException

Der Code, wie unten ist:

public String makeMVCServiceCall(String url,Method method,String additionalInformation) 

{ 
    url=url+"/"+additionalInformation; 
    return makeServiceCall(url,method); 
} 
public String makeServiceCall(String url,Method method) 
{ 
    HttpURLConnection connection=null; 
    try 
    { 
     URL u=new URL(url); 
     connection=(HttpURLConnection)u.openConnection(); 
     String m=method== Method.GET?"GET":method== Method.POST?"POST":null; 
     connection.setRequestMethod(m);   

     connection.setUseCaches(false); 
     connection.setAllowUserInteraction(false); 
     connection.setReadTimeout(READ_TIMEOUT); 
     connection.setConnectTimeout(CONNECT_TIMEOUT);    
     connection.connect(); 
     int status=0; 
     String response=connection.getResponseMessage();    
     status=connection.getResponseCode(); 


     switch (status) 
     { 
      case 200: 
      case 201: 

       BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       StringBuilder sb=new StringBuilder(); 

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

       return sb.toString(); 
      default:      
       return null; 
     } 
    } 

    catch (Exception e) 
    { 

    } 
    finally { 
     if(connection!=null) 
      try 
      { 
       connection.disconnect(); 
      } 
      catch (Exception e) 
      { 

      } 
    } 

    return null; 
} 

Timeouts sind 5 Sekunden, die Änderung auf 15 Sekunden hat keinen Unterschied gemacht. Ich denke, es ist eine schlechte Methode, ein JSON-Objekt am Ende der URL anzuhängen, aber ich muss diese API verwenden.

Irgendwelche Vorschläge?

+1

nie eine Ausnahme fangen, ohne sie anzumelden. Sie tun das an zwei Stellen in Ihrem Code. In der Tat ist es unklar, wie Sie feststellen, dass dies eine "SocketTimeoutException" ist. – CommonsWare

+1

Entschuldigung, ich musste sie beim Einfügen des Codes löschen. Ich fing sie mit e.getClass() – Milad

+0

Machst du andere Anrufe an diesen Server, die funktionieren? IOW, ist dieses Problem auf diese eine Anfrage beschränkt, oder ist es möglich, dass Sie größere Probleme haben, weil Sie überhaupt nicht mit dem Server kommunizieren können? – CommonsWare

Antwort

0

Versuchen Sie, die zusätzlichen Parameter kodiert:

URLEncoder.encode(additionalInformation)

+0

Danke, aber nichts hat sich geändert. – Milad

+0

Sind Sie hinter einem Proxy? Wenn ja, dann müssen Sie jvm proxy: http.proxyHost = [Domäne oder IP] http.ProxyPort = [Portnummer] – Blitzkr1eg

+0

Nein, mein Gerät direkt mit dem Internet verbunden. – Milad

Verwandte Themen