Android HttpsURLConnection против HttpClient, оба дают проблемы - PullRequest
1 голос
/ 14 ноября 2011

Я читал, что HttpsURLConnection глючит до 2.3, и у меня есть опыт из-за того, что он глючит.

Альтернативой, которую я попробовал, является HttpClient, однако он вызывает у меня проблемы в том смысле, что он возвращает мне следующее:

<?xml version="1.0" encoding="iso-8859-1"?>

, когда я, очевидно, должен вернуть JSON.

HttpsURLConnection возвращает JSON в порядке, но имеет некоторые противоречивые результаты при работе со многими запросами.(Возвращая JSON, я имею в виду, что ответ должен содержать JSON)

Любая идея, почему HttpClient возвращает какой-то тег XML вместо JSON (что должно быть возвращено)?

РЕДАКТИРОВАТЬ - КОД

HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);

    List<NameValuePair> urlParams = new ArrayList<NameValuePair>();
        urlParams.add(new BasicNameValuePair("&platform=","Android"));
        urlParams.add(new BasicNameValuePair("&action=","signin"));
        urlParams.add(new BasicNameValuePair("&user",username));
        urlParams.add(new BasicNameValuePair("&pass",password));



    try {

        post.setEntity(new UrlEncodedFormEntity(urlParams, HTTP.UTF_8));
        HttpResponse resp = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(
                resp.getEntity().getContent()));

        String line = "";
        JSONArray ja = new JSONArray();
        while ((line = rd.readLine()) != null) {
            Log.i("------>", line);
            ja = new JSONArray(line); //breaks here because it returns xml instead of JSON

        }
        rd.close();
        return ja;

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

Есть ли лучшие альтернативы этим двум?

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

Вы должны удалить символ "&" из BasicNameValuePair key.

BasicNameValuePair, автоматически добавляя "&" в каждый параметр, поэтому нет необходимости добавлять "&" символ

Youдолжен написать как показано ниже

urlParams.add(new BasicNameValuePair("platform","Android"));
1 голос
/ 14 ноября 2011

Это похоже на ответ сервера об ошибке на странице.Возможно, вы получаете ошибку 404 или много других ошибок http.Это только начало html-файла, который вы получаете с сервера.Вы уверены, что URL-адрес является допустимым и будет принимать соединение с мобильного без перенаправления?

0 голосов
/ 14 ноября 2011

Вместо:

 List<NameValuePair> urlParams = new ArrayList<NameValuePair>();
        urlParams.add(new BasicNameValuePair("&platform=","Android"));
        urlParams.add(new BasicNameValuePair("&action=","signin"));
        urlParams.add(new BasicNameValuePair("&user",username));
        urlParams.add(new BasicNameValuePair("&pass",password));

Попробуйте это:

 List<NameValuePair> urlParams = new ArrayList<NameValuePair>();
        urlParams.add(new BasicNameValuePair("platform","Android"));
        urlParams.add(new BasicNameValuePair("action","signin"));
        urlParams.add(new BasicNameValuePair("user",username));
        urlParams.add(new BasicNameValuePair("pass",password));

Обновление 1:

Что именно вы пытаетесь реализовать здесь:

 String line = "";
        JSONArray ja = new JSONArray();
        while ((line = rd.readLine()) != null) {
            Log.i("------>", line);
            ja = new JSONArray(line); //breaks here because it returns xml instead of JSON

        }

Очевидно, что это дает ошибку, потому что вы пытаетесь создать JSONArray из строки ответа XML, проверьте эту публичную функцию JSONArray (String json) и реализуйте ее.

...