Java Android将变量发布到drupal
嗨,我正在为iOS和Android编写一个应用程序,与druapl站点进行接口。我正在尝试允许用户登录到该网站,然后将成功登录的数据保存到应用程序的首选项中。下面,我能够成功地在Cocoa中实现我想要的功能,但我无法让它在Java中工作。下面是两个代码片段。非常感谢您对java的任何帮助 我只是没有从java中得到任何响应——响应返回为空字符串,而它应该是一个长JSON响应 可可登录(工作) Java登录(不工作)Java Android将变量发布到drupal,java,android,iphone,cocoa,Java,Android,Iphone,Cocoa,嗨,我正在为iOS和Android编写一个应用程序,与druapl站点进行接口。我正在尝试允许用户登录到该网站,然后将成功登录的数据保存到应用程序的首选项中。下面,我能够成功地在Cocoa中实现我想要的功能,但我无法让它在Java中工作。下面是两个代码片段。非常感谢您对java的任何帮助 我只是没有从java中得到任何响应——响应返回为空字符串,而它应该是一个长JSON响应 可可登录(工作) Java登录(不工作) 类登录任务扩展异步任务{ HttpResponse响应; 公共登录任务(){ }
类登录任务扩展异步任务{
HttpResponse响应;
公共登录任务(){
}
@凌驾
受保护的Void doInBackground(Void…arg0){
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(“http://examplesite/api/rest/user/login");
试一试{
post.setHeader(“接受”、“应用程序/json”);
post.setHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
List formparams=new ArrayList();
添加(新的BasicNameValuePair(“用户名”、“管理员”);
添加(新的BasicNameValuePair(“密码”、“密码”));
post.setEntity(新的UrlEncodedFormEntity(formparams));
响应=client.execute(post);
}捕获(客户端协议例外e){
}捕获(IOE异常){
}
返回null;
}
@凌驾
受保护的void onPostExecute(未使用的void){
//要完成活动吗
试一试{
Toast.makeText(Login.this,EntityUtils.toString(response.getEntity(),“UTF-8”),Toast.LENGTH\u SHORT.show();
}捕获(解析异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
查看您列出的示例,您没有在iOS和Android上提交相同的负载
在iOS上,您正确地使用username=foo&password=bar发布表单数据
,但在android上,您要求的是JSONObject
的字符串表示形式,即{'username':'foo','password':'bar'}
与使用JSONObject不同,您应该签出,尤其是
格式
方法。Drupal iOS sdk和dandy for android它怎么不起作用?您遇到了哪些错误?你能发布stacktrace吗?我不熟悉Cocoa,但看起来你在Cocoa中的请求中发送了一个字符串“username=user&password=pass”,您的请求中有一个JSON对象,使用Java。我将其编辑为我认为现在应该是的样子,但它仍然无法在我的项目上运行安装的drupal ios sdk,并且已经成功登录到更好的解决方案中。谢谢您在完成ios应用程序的调整后再试一次
NSURL *url = [NSURL URLWithString:@"http://examplesite/api/rest/user/login"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSData *requestBody = [[NSString stringWithFormat:@"username=%@&password=%@",[userField text],[passField text]] dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:requestBody];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
NSString *responseString = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];
class loginTask extends AsyncTask<Void, Void, Void> {
HttpResponse response;
public loginTask() {
}
@Override
protected Void doInBackground(Void... arg0) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://examplesite/api/rest/user/login");
try {
post.setHeader("Accept", "application/json");
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("username", "admin"));
formparams.add(new BasicNameValuePair("password", "password"));
post.setEntity(new UrlEncodedFormEntity (formparams));
response = client.execute(post);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
//TODO finish the activity
try {
Toast.makeText(Login.this, EntityUtils.toString(response.getEntity(), "UTF-8"), Toast.LENGTH_SHORT).show();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}