1

私はAndroid Webアプリケーションに取り組んでいます。単純な HttpPost メソッドを使用して Web サービスを呼び出している場合。URLはどこですか

http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039&folderName=issue&parentFolder=0

単純な http の使用

String url = "http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?
userID=2039&folderName=issue&parentFolder=0"

HttpPost post = new HttpPost(url);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
responseText = EntityUtils.toString(entity);

この Http メソッドを使用すると、すべてが正常に機能します。

しかし、 Ion android ライブラリを使用してこれを実行しようとすると。以下のコードを使用します。

Ion.with(context)
                .load("POST", "http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder")
                .setLogging("LOG-POST",Log.VERBOSE)
                .setHeader("Content-Type","application/json")
                .setBodyParameter("userID","2039")
                .setBodyParameter("folderName","TEST post")
                .setBodyParameter("parentFolder","0")
                .asString()
                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {
                        if (e != null) {
                            Toast.makeText(context, "Error downloading file", Toast.LENGTH_LONG).show();
                            return;
                        }
                        Toast.makeText(context, "Download completed", Toast.LENGTH_LONG).show();
                        Log.d("RESULT",result);
                    }
                });

以下のメッセージを返します。

{"Message":"No HTTP resource was found that matches the request URI 'http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder'."}

Ion の公式 github リポジトリで多くの問題を読みました。ほとんどの解決策を試しましたが、それでもエラーは解決されません。

ここで何が問題なのですか?

更新されたコード:

JsonObject json = new JsonObject();
        json.addProperty("userID","2039");
        json.addProperty("folderName","temp0011");
        json.addProperty("parentFolder","0");

        Ion.with(context)
                .load("POST", "http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder")
                .setLogging("ion-geny",Log.DEBUG)
                .setHeader("Content-Type","application/json")
                .setHeader("Cache-Control","no-cache")
                .setJsonObjectBody(json)
                .asString()
                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {
                        if (e != null){
                            Log.e("Error Result", e.toString());
                        }
                        Log.d("Result", result);
                    }
                });

ログキャット:

D/ion-geny﹕ (0 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: preparing request
D/ion-geny﹕ (0 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: preparing request
I/ion-geny﹕ (0 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: Using loader: com.koushikdutta.ion.loader.HttpLoader@42656120
D/ion-geny﹕ (0 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: Executing request.
D/ion-geny﹕ (6611 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: Response is not cacheable
D/ion-geny﹕ (6615 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: Connection successful
D/ion-geny﹕ (8592 ms) http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039: Recycling keep-alive socket

応答:

{"Message":"No HTTP resource was found that matches the request URI 'http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?userID=2039'."}
4

1 に答える 1

0

問題は、Web サービスの body パラメータにありました。全体を QueryString として受け入れています。そして、HttpHeader "Content-Length = 0" を設定する必要があります。以下は私の変更されたコードです。

     Ion.with(context)
                    .load("POST", "http://xxx.xx.xxx.xxx/api/UploadFile/InsertFolder?
userID=2039&folderName=temp0011&parentFolder=0")
                    .setLogging("ion-geny",Log.DEBUG)
                    .setHeader("Content-Length","0")
                    .asString()
                    .setCallback(new FutureCallback<String>() {
                        @Override
                        public void onCompleted(Exception e, String result) {
                            if (e != null) {
                                Log.e("Error Result", e.toString());
                            }
                            Log.d("Result", result);
                        }
                    });

それは今働いています。

于 2015-03-24T13:22:37.100 に答える