myc_100 2013-05-09 07:26 采纳率: 10%
浏览 10164
已采纳

Android 中传递 json 的问题

我在开发一个程序,在 webpage 上使用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 结构的问题。{param:paramstr} in $.post()方法是一个map。我改了好几次还是错误的。
什么问题呢?

  • 写回答

2条回答

  • hxn_217 2013-05-09 09:32
    关注

    你应该分别传递每个参数,不需要一个 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));
    

    用sendData list 取代 JSON 对象。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件