如何将WCF与Android连接?
在活动中,有两个用于获取用户名和密码的编辑文本和一个用于操作的按钮。下面是侦听器代码如何将WCF与Android连接?,android,json,wcf,Android,Json,Wcf,在活动中,有两个用于获取用户名和密码的编辑文本和一个用于操作的按钮。下面是侦听器代码 Button sendBtn = (Button) findViewById(R.id.sendBtn); sendBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText un = (EditText)
Button sendBtn = (Button) findViewById(R.id.sendBtn);
sendBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText un = (EditText) findViewById(R.id.usernameEditText);
EditText pas = (EditText) findViewById(R.id.passwordEditText);
HttpResponse response = null;
user_name = un.getText().toString();
password = pas.getText().toString();
path = p + user_name;
my_map = createMap();
JSONObject ob=null;
try {
ob = new JSONObject("{\"Username\":user_name,\"Password\":password}");
} catch (JSONException e1) {
e1.printStackTrace();
}
try {
response = makeRequest(path, my_map,ob);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
String json = reader.readLine();
JSONTokener tokener = new JSONTokener(json);
JSONArray finalResult = new JSONArray(tokener);
} catch (Exception e) {
Log.e("HTTP ERROR", e.toString());
}
}
});
以下是makeRequest函数:
public static HttpResponse makeRequest(String path, Map params,JSONObject obj) throws Exception
{
DefaultHttpClient httpclient = null;
HttpPost httpost = null;
ResponseHandler responseHandler = null;
//instantiates httpclient to make request
httpclient = new DefaultHttpClient();
//url with the post data
HttpGet httpget = new HttpGet(path);
httpost = new HttpPost(path);
//convert parameters into JSON object
JSONObject holder = obj;
//passes the results to a string builder/entity
StringEntity se = new StringEntity(holder.toString(), HTTP.UTF_8);
//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
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
try{
//Handles what is returned from the page
responseHandler = new BasicResponseHandler();
}catch(Exception e){
Log.e("HTTP ERROR", e.toString());
}
return httpclient.execute(httpost, responseHandler);
}
这里是WCF文件:
namespace MyWCFSolution
{
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "Check")]
String CheckSQL(string getJson);
}
}
如何使用Json将wcf服务器连接到android。我想发送包含用户名和密码的Json对象和包含用户名、密码、姓名和姓氏的Json对象的响应。但在这一点上我有困难。我无法连接主机,也无法发布和获取json数据。有人能解释清楚吗?(示例代码、注释)浏览本文
ObjectMapper mapper=new ObjectMapper();
ArrayList respuestas=新的ArrayList(1);
RespuestaEncuesta r=新的RespuestaEncuesta();
r、 Comentarios=“ASD”;
r、 GrupoClienteID=UUID.fromString(“00000000-0000-0000-0000-000000000000”);
r、 GrupoID=1155;
r、 Opcion=“2”;
再加上(r);
RespuestaWrapper数据=新的RespuestaWrapper();
data.Respuestas=Respuestas;
configure(SerializationFeature.WRAP\u ROOT\u值,true);
字符串respuestarJson=mapper.writeValueAsString(数据);
字符串url=config[0]+“/GuardaEncuestas”;
HttpPost HttpPost=新的HttpPost(url);
setHeader(“接受”、“应用程序/json”);
setHeader(“内容类型”、“应用程序/json”);
StringEntity tmp=新的StringEntity(respuestarJson);
httpPost.setEntity(tmp);
DefaultHttpClient httpClient=新的DefaultHttpClient();
httpClient.execute(httpPost);
希望它会很有用我刚才做了一些东西,几乎像你需要的解决方案 我不知道这是否是最好的解决办法,但它非常有效 在您的方法中,首先,如果您希望接收JSON,“GET”不是最佳选项,请尝试POST,因为URL查询字符串有字符限制,如果您的JSON很大,它将不会进入其中 其次,我在Net中声明了一个与JSON结构完全匹配的POCO对象,然后在方法上声明它必须接收该对象 重要的是,json上的键与POCO对象属性完全匹配,并且是键敏感的 IIS自动解析从Android发布的JSON到网络中的POCO对象,所以它像魔术一样工作,无需解析,接收到干净的对象 当然,检查您的URI模板是否正常,因为如果不正常,您将永远不会在您的WCF服务器上收到请求 另一件事:在Android应用程序中,您将JSON作为POST请求发送。在WCF中,您的方法正在等待GET请求
ObjectMapper mapper = new ObjectMapper();
ArrayList<RespuestaEncuesta> respuestas = new ArrayList<RespuestaEncuesta>(1);
RespuestaEncuesta r = new RespuestaEncuesta();
r.Comentarios = "ASD";
r.GrupoClienteID = UUID.fromString("00000000-0000-0000-0000-000000000000");
r.GrupoID = 1155;
r.Opcion = "2";
respuestas.add(r);
RespuestaWrapper data = new RespuestaWrapper();
data.Respuestas = respuestas;
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
String respuestarJson = mapper.writeValueAsString(data);
String url = config[0] + "/GuardaEncuestas";
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
StringEntity tmp = new StringEntity(respuestarJson);
httpPost.setEntity(tmp);
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.execute(httpPost);