我在 ASP.net 中创建了一个 RESTful 的 Web 服务。我想从一个 Android 应用程序使用这些服务。基本上,我使用 Android 的默认库以 JSON 格式发送请求并获得响应。
这是我的代码:
public class PostImagesHandler {
final static String TAG = "WebHandlerHttpPost";
Context context;
ImagesBean imageBean;
public String postImagesRequest(String URL, Context context,
ImagesBean imgBean) {
this.context = context;
String result = null;
this.imageBean = imgBean;
try {
HttpPost request = new HttpPost(URL);
System.out.println("WHAT IS URL :: " + URL);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
request.addHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
request.addHeader("Pragma", "no-cache"); // HTTP 1.0.
request.addHeader("Expires", "0"); // Proxies.
Bitmap bm = BitmapFactory.decodeFile("sdcard/dotTest9.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 90, baos);
byte[] bytes_ = baos.toByteArray();
String image_str = Base64.encodeToString(readFile().getBytes(),
Base64.NO_WRAP);
appendLog(image_str);
JSONStringer userJson = new JSONStringer().object()
.key("objPostSectionImages").object().key("ID")
.value("1").key("SUB_ID").value("1").key("MainTaskId")
.value("1").key("ImageBase64").value(image_str)
.key("actualAuditDate").value(getCurrentDateTime()).endObject()
endObject();
Log.d(TAG, "SECTION IMAGE STRING :: " + userJson.toString());
StringEntity entity = new StringEntity(userJson.toString(), "UTF-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
entity.setContentType("application/json");
request.setEntity(entity);
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 30000);
HttpConnectionParams.setSoTimeout(params, 10000);
// Send request to WCF service
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
if (response != null) {
StringBuilder sb = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line;
while ((line = rd.readLine()) != null) {
sb.append(line + "\n");
}
result = sb.toString();
Log.d(TAG, "AUDIT SECTION IMAGES Response: " + result);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public void appendLog(String text) {
File logFile = new File("sdcard/dotTest7.txt");
if (!logFile.exists()) {
try {
logFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
// BufferedWriter for performance, true to set append to file flag
BufferedWriter buf = new BufferedWriter(new FileWriter(logFile,
true));
buf.append(text);
// buf.newLine();
buf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressLint("SimpleDateFormat")
public static String getCurrentDateTime() {
return new SimpleDateFormat("MM-dd-yyyy").format(Calendar.getInstance()
.getTime());
}
}
我可以通过这种方式发送小图像,但是在发送大图像(超过 5 KB)时,我遇到了问题。有时我会收到“请求错误”,有时它会起作用。