我在開發一個程序,在 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。我改了好幾次還是錯誤的。
什麼問題呢?
你應該分別傳遞每個參數,不需要一個 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 對象。