安卓传递json

标签 android json

我正在开发一个项目。我在网页上写使用 jquery:

$.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结构。$.post()方法中的{param:paramstr}是一个map。改了很多次,还是不对。

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

最佳答案

你必须单独传递每个参数,这里不需要 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 对象,而是 sendData 列表。

关于安卓传递json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038261/

相关文章:

android - 如何在android相机api上进行图像分析

android - 如何像在 Google Play 商店应用中一样设置 Android SearchView 的样式?

android - 想要在每个标记上显示设备 ID,从服务器接收到的设备 ID

python - 如何使用 python pandas 处理 excel 中的组合列?

JSON 模式枚举与单值模式

javascript - 创建一行代码和一个脚本来从另一个站点(例如 Twitter、分析等)回调表中的数据库信息

java - 使用默认类型对列表进行 Jackson 反序列化

java - Android 抽屉导航 fragment

java - 在回收站 View 中显示视频

java - Android:适配器在 ListView 问题之外更改