本文介绍了Android向WCF服务发布请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在将数据从android发布到wcf服务,但是使用HttpURLConnection收到 Bad Request 错误消息.
I'm posting data from android to wcf service but getting Bad Request error using HttpURLConnection.
Android代码:
Android Code:
`public User RegisterPost(Context context, User rUser) throws UnsupportedEncodingException{
String url = context.getResources().getString(R.string.SERVICE_URL)+ "Signup";
try
{
JSONObject userValue = new JSONObject();
JSONObject user = new JSONObject();
userValue.put("name", rUser.name);
userValue.put("email", rUser.email);
userValue.put("password", rUser.password);
userValue.put("phone", rUser.phone);
userValue.put("nic", rUser.nic);
userValue.put("userType", rUser.userType);
userValue.put("image", rUser.image);
user.put("user", userValue.toString());
String response = postData(url, user);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}`
postData()函数在同一文件中.
postData() function is in same file.
public String postData(String urlpath, JSONObject json)
{
HttpURLConnection connection = null;
try {
URL url=new URL(urlpath);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());
Log.d("write data",json.toString());
streamWriter.write(json.toString());
streamWriter.flush();
StringBuilder stringBuilder = new StringBuilder();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(streamReader);
String response = null;
while ((response = bufferedReader.readLine()) != null) {
stringBuilder.append(response + "\n");
}
bufferedReader.close();
Log.d("HTTP_OK response", stringBuilder.toString());
return stringBuilder.toString();
} else {
Log.e("else response", connection.getResponseMessage());
return null;
}
} catch (Exception exception){
Log.e("test", exception.toString());
return null;
} finally {
if (connection != null){
connection.disconnect();
}
}
}
json数据发送到服务;
json data sending to service;
{
"user": "{\"name\":\"rrr rrr\",\"email\":\"[email protected]\",\"password\":\"123\",\"phone\":\"12333333\",\"nic\":\"44444444\",\"userType\":\"Passenger\",\"image\":\"55akasdfadphpoijpiojasdfasdfasdfasdfasdfasdfasdfasdf\"}"
}
这是WCF服务代码;
here is WCF service code;
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Signup",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
bool Signup(ReturnUserData user);
public bool Signup(ReturnUserData user)
{
user usr = new user();
usr.name = user.name;
usr.email = user.email;
usr.password = user.password;
usr.phone = user.phone;
usr.nic = user.nic;
usr.userType = user.userType;
usr.image = user.image;
db.users.Add(usr);
db.SaveChanges();
return true;
}
public class ReturnUserData
{
public string id { get; set; }
public string name { get; set; }
public string email { get; set; }
public string password { get; set; }
public string phone { get; set; }
public string userType { get; set; }
public string image { get; set; }
}
推荐答案
最后,我弄清楚了问题所在,我对RegisterPost()
函数的实现有误,所以我更改了该函数.
Finally I figured out what is the issue, I have some wrong implementation of my RegisterPost()
function, so I change the function.
public User RegisterPost(Context context, User rUser) throws UnsupportedEncodingException{
String url = context.getResources().getString(R.string.SERVICE_URL)+ "Signup";
try
{
JSONObject newUser = new JSONObject();
newUser.put("name", rUser.name);
newUser.put("email", rUser.email);
newUser.put("password", rUser.password);
newUser.put("phone", rUser.phone);
newUser.put("nic", rUser.nic);
newUser.put("userType", rUser.userType);
newUser.put("image", rUser.image);
String response = postData(url, newUser.toString());
Log.d("response", response);
if(response!="")
{
try {
JSONObject user = new JSONObject(response);
User returnUser = new User( user.getInt("id"),user.getString("name"),user.getString("email"),user.getString("password"),user.getString("phone"),user.getString("nic"),user.getString("userType"), user.getString("street"), user.getString("city"), user.getString("country"), Double.parseDouble(user.getString("lat")), Double.parseDouble(user.getString("lng")),user.getInt("is_login"),user.getInt("is_vehicle_added"), user.getString("reg_id"), user.getInt("isError"), user.getString("errorMessage"), user.getString("image"));
return returnUser;
} catch (JSONException e) {
e.printStackTrace();
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
这篇关于Android向WCF服务发布请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!