我尝试了Volley
,Httpclient
,AsyncHttpclient
和Retrofit
。未通过Retrofit为JsonArray
生成Pojo。当json数组插入具有某个名称的json对象时,将创建Pojo。这意味着Parent需要是JSONObject
当父级为JSONArray时,使用DefaultHttpClient
会导致 400错误代码。
public static String getHttpResponse(String api_url, HashMap<String,String> headers, JSONArray jsonArray) {
Log.d(TAG, "getHttpResponse() called with: api_url = [" + api_url + "], headers = [" + headers + "], jsonArray = [" + jsonArray + "]");
InputStream ist;
StringBuilder s;
String wresponse = null;
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
//url with the post data
HttpPost httpost = new HttpPost(api_url);
//passes the results to a string builder/entity
StringEntity se = new StringEntity(jsonArray.toString());
//sets the post request as the resulting string
httpost.setEntity(se);
//sets a request header so the page receving the request
//will know what to do with it
for(Map.Entry<String,?> entry : headers.entrySet()){
Log.d("map values",entry.getKey() + ": " +
entry.getValue().toString());
httpost.setHeader(entry.getKey(), entry.getValue().toString());
}
HttpResponse response = httpclient.execute(httpost);
Log.e(TAG, "getHttpResponse: status code : "+response.getStatusLine().getStatusCode() );
if (response.getStatusLine().getStatusCode() != 200) {
Log.d(TAG, "Server encountered an error");
}
HttpEntity resEntity = response.getEntity();
ist = resEntity.getContent();
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(ist, "UTF-8"));
String sResponse;
s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
wresponse = s.toString();
Log.d(TAG, "getHttpResponse: wresponse : "+wresponse);
} catch (Exception e) {
Log.e(TAG, "getHttpResponse: Exception");
e.printStackTrace();
}
return wresponse;
}
使用AsyncHttpClient
结果套接字异常
public static String uploadAsyncPost(Context con,String api_url, JSONArray jsonArray) {
public static String uploadAsyncPost(Context con,String api_url, JSONObject jsonArray) {
Log.d(TAG, "uploadAsyncPost: ");
SessionManager sm = new SessionManager(con);
String wresponse = "" ;
try {
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(20*1000);
client.addHeader(AppStrings.RestHeaders.contentType, AppStrings.RestHeaders.applicationJson);
client.addHeader(AppStrings.RestHeaders.user_agent, AppUtils.getUserAgentHeader(con));
client.addHeader(AppStrings.RestHeaders.loquace_header_param, sm.getStringData(AppStrings.Session.app_header_value));
client.addHeader(AppStrings.RestHeaders.app_token_header_param, sm.getStringData(AppStrings.Session.token));
StringEntity entity = new StringEntity(jsonArray.toString());
client.post(con, api_url, entity, "application/json",
new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
Log.e("data", "sucess");
Log.d(TAG, "onSuccess() called with: arg0 = [" + arg0 + "], arg1 = [" + arg1 + "], arg2 = [" + arg2 + "]");
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
Log.e("data", "fail");
Log.d(TAG, "onFailure() called with: arg0 = [" + arg0 + "], arg1 = [" + arg1 + "], arg2 = [" + arg2 + "], arg3 = [" + arg3 + "]");
}
} );
}catch(Exception e){
e.printStackTrace();
}
return wresponse;
}