I have created a web service in ASP.net which is RESTful. From an Android application I want to consume these services. Basically I am sending request and getting response in JSON, using Android's default library.
Here is my code :
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());
}
}
I'm able to send small images this way, but while sending large images (more than 5 KB), I am facing problems. Some times I get "Request Error" and sometimes it works.