2

私はアンドロイド アプリに取り組んでいます。このアプリは、glassfish 3.1.2.2 で実行されている Web サービスのクライアントです。この Web サービスは、xml および json パーサーで動作します。WS を外部でテストして、取得したものと見たときの答えを表示します。サーバーからのxml回答の場合、xmlデータを取得します.Json回答でも同じことが起こりました.

問題

問題は、コンテンツ タイプを application/json として設定した get メソッドの android クライアントで発生しますが、WS は応答 xml のみです。

誰かが私がどこで間違っているのか教えてもらえますか?コードを入れて最後にログインします。

コード:-

private class TareaWSObtener extends AsyncTask<String, Integer, Boolean>{

        //CONSTANTES
        private static final String CONTENT = "Content-Type"; //content-type
        private static final String JSONTYPE = "application/json"; //application/json
        private static final String LOGWS = "MovilSecure:WebServices";
        private int id;
        private String nombre;

        @Override
        protected Boolean doInBackground(String... params) {
            // TODO Auto-generated method stub
            boolean result = true;

            Log.i(LOGWS, "Levantando cliente");
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet get = new HttpGet("http://10.0.2.2:8080/WS-MovilSecure_SandBox_ONLY_/webresources/persona");
            //get.setHeader("Content-Type", "application/json");
            Log.i(LOGWS, "cliente levantado");
            try{
                Log.i(LOGWS, "Obteniendo data");
                HttpResponse resp = httpClient.execute(get);

                String stringRsp = EntityUtils.toString(resp.getEntity());
                JSONObject respJSON = new JSONObject(stringRsp);

                id = respJSON.getInt("idPersona");
                nombre = respJSON.getString("nombre");
                Log.i(LOGWS, "Data Obtenida");

            }
            catch(Exception e){
                Log.e(LOGWS, "Problemas al conectar con el WS", e);
                result = false;
            }

            return result;
        }

        protected void onPostExecute(boolean result){
            if(result){Log.i(LOGWS, "data:"+id+nombre);}
        }

    }

ログ:-

09-13 21:52:50.073: I/MovilSecure:WebServices(3155): Levantando cliente
09-13 21:52:50.123: I/MovilSecure:WebServices(3155): cliente levantado
09-13 21:52:50.123: I/MovilSecure:WebServices(3155): Obteniendo data
09-13 21:52:50.293: E/MovilSecure:WebServices(3155): Problemas al conectar con el WS
09-13 21:52:50.293: E/MovilSecure:WebServices(3155): org.json.JSONException: Value <?xml       of type java.lang.String cannot be converted to JSONObject
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at org.json.JSON.typeMismatch(JSON.java:111)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at org.json.JSONObject.<init>(JSONObject.java:158)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at org.json.JSONObject.<init>(JSONObject.java:171)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at com.example.wsclient_movilesecure.MainActivity$TareaWSObtener.doInBackground(MainActivity.java:110)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at com.example.wsclient_movilesecure.MainActivity$TareaWSObtener.doInBackground(MainActivity.java:1)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-13 21:52:50.293: E/MovilSecure:WebServices(3155):    at java.lang.Thread.run(Thread.java:841)
4

3 に答える 3

2

Acceptヘッダーを設定したい。ここでそれについて読むことができます: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

「Accept リクエスト ヘッダー フィールドを使用して、レスポンスで受け入れ可能な特定のメディア タイプを指定できます。」

get.setHeader("Accept", "application/json");

Content-Typeヘッダーは、送信するデータの種類を示すために使用されます。GET リクエストの場合、リクエストには本文がありません。この場合、 Content-Typeを設定する必要はありません。

于 2013-09-18T16:16:17.880 に答える
0

これがエラーかどうかはわかりませんが、この行のコメントを外してみてください

 //get.setHeader("Content-Type", "application/json");
于 2013-09-18T16:11:21.337 に答える