2012-12-26 99 views
1

我正在开发一个项目。我写一篇关于网页使用jQuery:Android提供json

$.post(url, {param: paramstring}, function(result){}); 

Paramstring是根据参数构造一个JSON字符串,如{"action":"get","username":"username"}。现在我想在Android上运行它,并且页面上添加两个TextView中输入用户名和密码。还有一个注册按钮。按钮监听程序是这样的:

EditText et1 = (EditText)findViewById(R.id.username); 
String user = et1.getText().toString(); 
EditText et2 = (EditText)findViewById(R.id.pass); 
String password = et2.getText().toString(); 
// the password should upload after MD5 encryption. this is encryption method. the result is the same with js encryption. 
String password_md5 = toMd5(password.getBytes()); 
Log.d(TAG, user+"-"+password+"-"+password_md5); 
try { 
HttpPost request = new HttpPost(URL); 
JSONObject params = new JSONObject(); 
params.put("action", "get"); 
params.put("result", "user"); 
params.put("category", "base"); 
params.put("username", user); 
params.put("password", password_md5); 

List<BasicNameValuePair> sendData = new ArrayList<BasicNameValuePair>(); 
sendData.add(new BasicNameValuePair("param", params.toString())); 

System.out.println(params.toString()); 

request.setEntity(new UrlEncodedFormEntity(sendData,"utf-8")); 
System.out.println(EntityUtils.toString(request.getEntity())); 

HttpResponse response= new DefaultHttpClient().execute(request); 
String retSrc = EntityUtils.toString(response.getEntity()); 

System.out.println(retSrc); 

} catch (Exception e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

上面的代码返回数据显示登录错误。我想是因为json结构。 {param:paramstr}$.post()方法是一个映射。我改变了很多次,这仍然是错误的。

你能给我一些建议吗?非常感谢!

+0

我建议你在服务器端查看jQuery发送的内容和android发送的内容(并发布这些结果)。然后我建议你使用更加标准的认证方式(http有内置的机制) – njzk2

回答

1

您必须单独传递每个参数,并且不需要此处的JSON结构。 jQuery所使用的JSON结构只是一种为$ .post()方法提供可变数量参数的方法。

取而代之的是:

params.put("action", "get"); 
params.put("result", "user"); 
params.put("category", "base"); 
params.put("username", user); 
params.put("password", password_md5); 

List<BasicNameValuePair> sendData = new ArrayList<BasicNameValuePair>(); 
sendData.add(new BasicNameValuePair("param", params.toString())); 

试试这个:

List<BasicNameValuePair> sendData = new ArrayList<BasicNameValuePair>(); 
sendData.add(new BasicNameValuePair("action", "get")); 
sendData.add(new BasicNameValuePair("result", "user")); 
sendData.add(new BasicNameValuePair("category", "base")); 
sendData.add(new BasicNameValuePair("username", user)); 
sendData.add(new BasicNameValuePair("password", password_md5)); 

你看,而不是JSON对象,使用送出数据列表。