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?
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
Entschuldigung, ich musste sie beim Einfügen des Codes löschen. Ich fing sie mit e.getClass() – Milad
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