0

こんにちは、iOS と Android の両方で druapl サイトと連携するアプリを作成しています。ユーザーがウェブサイトにログインできるようにし、成功したログインからのデータをアプリの設定に保存できるようにしようとしています。以下では、Cocoa でやりたかったことをうまく実行できましたが、Java で動作させることができませんでした。両方のコード スニペットを以下に示します。Java に関するヘルプをいただければ幸いです。

Javaからの応答がまったく得られないだけで、長いJSON応答である必要がある場合、応答は空の文字列として返されます。

Cocoa ログイン (作業中)

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];

Java ログイン (機能しない)

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();
        }
    }       
}
4

2 に答える 2

1

このようなものがあります。DrupaliOSSDKおよびAndroid用ダンディ

于 2012-10-28T01:15:08.200 に答える
0

リストした例を見ると、iOS と Android で同じペイロードを送信していません。

iOS では を使用してフォーム データを正しく POST してusername=foo&password=barいますが、Android では の文字列表現を要求していJSONObjectます{ 'username': 'foo', 'password':'bar' }

JSONObject を使用するのではなく、URLEncodedUtils、特にformatメソッドをチェックアウトする必要があります。

于 2012-10-27T23:48:11.677 に答える