我正在尝试发送包含一些文本字段和图像的表单。我希望将所有这些数据发送到一个URL。我学会了发送文本,后来我学会了发送图像。
现在问题是我将表单数据发送到服务器。多个请求分别发送,一个用于文本字段,另一个用于图像字段。有人可以告诉我如何通过一个请求发送这些文本和图像吗?
这是我发送文字的代码:
@Override
public void onClick(View v) {
if(isConnected()) {
feedbackName = (EditText)findViewById(R.id.feedback_name);
feedbackEmail = (EditText)findViewById(R.id.feedback_email);
String email=feedbackEmail.getText().toString().trim();
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
feedbackComment = (EditText)findViewById(R.id.feedback_comment);
String name = feedbackName.getText().toString();
String comment = feedbackComment.getText().toString();
if ((name.matches("")) || (name.matches("")) || (email.matches("")) || (comment.matches(""))) {
Toast.makeText(getApplicationContext(), "Please fill up all the fields", Toast.LENGTH_LONG).show();
} else {
if (email.matches(emailPattern)) {
new HttpAsyncTask().execute("http://myeducationhunt.com/api/v1/post-feedback");
} else Toast.makeText(getApplicationContext(),"Invalid Email Address",Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(getApplicationContext(), "Please check your internet connection", Toast.LENGTH_LONG).show();
}
}
public static String POST(String url, feedbackData feedbackData){
InputStream inputStream = null;
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String json = "";
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("name", feedbackData.getName());
jsonObject.accumulate("email", feedbackData.getEmail());
jsonObject.accumulate("comment", feedbackData.getComment());
json = jsonObject.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
if(inputStream != null)
result = convertInputStreamToString(inputStream);
else
result = "Did not work!";
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
}
return result;
}
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
feedbackData feedbackData = new feedbackData();
feedbackData.setName(feedbackName.getText().toString());
feedbackData.setEmail(feedbackEmail.getText().toString());
feedbackData.setComment(feedbackComment.getText().toString());
return POST(urls[0],feedbackData);
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), "Feedback send successfully", Toast.LENGTH_LONG).show();
}
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
这是我用来将图像发送到服务器的代码:
private class UploadImage extends AsyncTask<Void,Void, Void> {
Bitmap image;
String name;
public UploadImage(Bitmap image,String name){
this.image=image;
this.name=name;
}
@Override
protected Void doInBackground(Void... params) {
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
String encodedImage= Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);
ArrayList<NameValuePair> dataToSend=new ArrayList<>();
dataToSend.add(new BasicNameValuePair("image",encodedImage));
dataToSend.add(new BasicNameValuePair("name",name));
HttpParams httpRequestParams=getHttpRequestParams();
HttpClient client=new DefaultHttpClient(httpRequestParams);
HttpPost post=new HttpPost(SERVER_ADDRESS);
try{
post.setEntity(new UrlEncodedFormEntity(dataToSend));
client.execute(post);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(getApplicationContext(),"Image Uploaded",Toast.LENGTH_LONG).show();
}
}