Ошибка аутентификации: невозможно ответить ни на одну из следующих проблем: {} Android - 401 Unauthorized

Ошибка аутентификации: невозможно ответить ни на одну из следующих проблем: {} Android - 401 Unauthorized

Я взял ссылку по этой ссылке Ошибка аутентификации при использовании HttpPost с DefaultHttpClient на Android

Я работаю над Android-приложением в Drupal. Я отправляю данные из приложения для Android на сайт drupal - веб-сервис в формате JSON. Теперь я могу читать данные JSON из веб-сервиса Drupal и записывать их в свое приложение для Android. Но сталкиваясь с проблемой при написании на drupal с Android, он генерирует ответ с кодом состояния

401 Unauthorized

Из собственного приложения для Android он генерирует 401, а из телефонного промежутка от Android, когда я инициирую AJAX-запрос, он работает отлично & amp; пишет статью или страницу на сайте drupal. так что это означает, что веб-сервис работает отлично и

my phonegap android app works perfectly there is problem with Android native JAVA application I am running my android application on Android2.3.4 -> Samsung Galaxy S Plus - Samsung GT-I9001

Вот мой код для Java-Android.

==============================

String url = "XXX";
strResponse1 = makeWebForPostIdea(url,title,body);

public static String makeWebForPostIdea(String url, String title,String body)
    {
        JSONStringer jsonobject = null;
        JSONObject json = null;
        JSONObject jsonnode = null;

        DefaultHttpClient client = new DefaultHttpClient();

Credentials creds = new UsernamePasswordCredentials("username", "password");
        client.getCredentialsProvider().setCredentials(new       AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
 HttpPost post = new HttpPost(url);
System.out.println("value of the post =============> "+post);
 try {
            JSONObject jsonvalue = new JSONObject();
            jsonvalue.put("value", body.toString());

            JSONArray array = new JSONArray();
            array.put(jsonvalue);

            jsonnode = new JSONObject();
            jsonnode.put("und", array);

            System.out.println("@@@@@@2    jsonnode=======>"+jsonnode.toString());


        } catch (JSONException e3) {
            // TODO Auto-generated catch block
            e3.printStackTrace();
        }
 try {
 jsonobject = new JSONStringer().array().object().key("und").object().key("0").object().key("value").value(body).endObject().endObject().endObject().endArray();
    System.out.println("=============>"+jsonobject);

        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

         List<NameValuePair> params = new ArrayList<NameValuePair>();

                 params.add(new BasicNameValuePair("type","page"));

            params.add(new BasicNameValuePair("title",title));
            params.add(new BasicNameValuePair("language","und"));
            params.add(new BasicNameValuePair("body",jsonobject.toString()));

            System.out.println("value of the params =============> "+params);

        UrlEncodedFormEntity formEntity = null;
        try {
                formEntity = new UrlEncodedFormEntity(params);
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        post.setEntity(formEntity);

        try {

            HttpResponse response = client.execute(post);

            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("=========> statusCode post idea=====> "+statusCode);    
            if (statusCode == HttpStatus.SC_OK)
            {
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                return iStream_to_String(is);
            }
            else
            {
                return "Hello This is status ==> :"+String.valueOf(statusCode);
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

     public static String iStream_to_String(InputStream is1) {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096);
            String line;
            StringBuilder sb = new StringBuilder();
            try {
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
                }
                rd.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String contentOfMyInputStream = sb.toString();
        return contentOfMyInputStream;
            }

    }

   }

вот logcat, который я получаю.

 08-09 12:41:29.063: I/System.out(336): value of the post =============>      org.apache.http.client.methods.HttpPost@4053c3c8
 08-09 12:41:29.093: I/System.out(336): @@@@@@2    jsonnode=======>{"und":  [{"value":"ddddddd"}]}
 08-09 12:41:29.093: I/System.out(336): =============>[{"und":{"0":{"value":"ddddddd"}}}]
 08-09 12:41:29.103: I/System.out(336): value of the params =============> [type=page, title=hhhh, language=und, body=[{"und":{"0":{"value":"ddddddd"}}}]]
 08-09 12:41:30.913: W/DefaultRequestDirector(336): Authentication error: Unable to respond to any of these challenges: {}
 08-09 12:41:30.913: I/System.out(336): =========> statusCode post idea=====> 401
 08-09 12:41:30.924: I/System.out(336): =========> Response from post  idea => Hello This is status ==> :401

Вот мой запрос PhoneGap Ajax, он работает отлично.

$('#page_node_create_submit').live('click',function(){

  var title = $('#page_node_title').val();
  //if (!title) { alert('Please enter a title.'); return false; }

  var body = $('#page_node_body').val();
  //if (!body) { alert('Please enter a body.'); return false; }

  // BEGIN: drupal services node create login (warning: don't use https if you don't     have ssl setup)
  $.ajax({
      url: "XXX",
      type: 'post',
      data: 'node[type]=page&node[title]=' + encodeURIComponent(title) +  '&node[language]=und&node[body][und][0][value]=' + encodeURIComponent(body),
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert('page_node_create_submit - failed to login');
        console.log(JSON.stringify(XMLHttpRequest));
        console.log(JSON.stringify(textStatus));
        console.log(JSON.stringify(errorThrown));
      },
      success: function (data) {
      $.mobile.changePage("index.html", "slideup");
     }
  });
  // END: drupal services node create

  return false;

});

=================================================================================

Edit :

Я попробовал различные методы для Apache httpclient для моей ошибки. За это время я провел некоторое исследование и искал в Google и обнаружил некоторые интересные вещи.

1st Дело в том, что я обнаружил, что Android-Google официально не рекомендует Apache HttpClient, который я использую в своем коде. Проверьте эту ссылку. В этой ссылке ссылка от Джесси Уилсона из команды Dalvik. В том, что они предлагают использовать HttpURLConnection вместо DefaultHttpClient, а также написали, что команда Android больше не будет разрабатывать Apache httpclient. так что это старая версия, которую я использую.

http://android-developers.blogspot.in/2011/09/androids-http-clients.html

2nd вещь, которую я нашел из этой ссылки. Это говорит о том, чтоAndroid is shipping with Apache's HttpClient 4.0 Beta2, which has a pitfall, when it comes to Basic Authentication. The Authentication method that I am using is of HttpClient 3.x , that I have found out from this link. check the link. http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication

Так что версия вопроса.

http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html

Я также нашел несколько ссылок с потенциальным решением этой проблемы.

http://ogrelab.ikratko.com/using-newer-version-of-httpclient-like-4-1-x/

Apache HttpClient 4.1 on Android

What version of Apache HTTP Client is bundled in Android 1.6?

Из этих ссылок я сделал вывод, что если мы обновим Apache HttpClient до последней стабильной версии, то эта проблема может быть решена.

Но это напрямую невозможно, так как Android Team официально прекратила поддержку Apache httpclient.

С помощью этой ссылки можно было бы решить. Я не пробовал это, но я работаю над этим.

Это библиотека, которая может помочь в обновлении версии httpclient в Android.

http://code.google.com/p/httpclientandroidlib/

Другим решением может быть использованиеHttpURLConnection Я тоже работаю над этим.

Но большинство людей здесь на стеке потока и Интернет, кажется, используютDefaultHttpCLient с Android. И, конечно же, он также работает со мной по всему моему приложению, включая вход в систему, регистрацию, чтение с сервера и сеанс и другие функции. Просто он не работает с прямой публикацией какой-либо статьи на моем сайте сервера Drupal. Отлично работает с POST-запросом при регистрации пользователя на сервере.

Итак, друзья, какие-либо предложения по этому поводу? почему это не работает только с размещением статьи?

Ответы на вопрос(4)

Ваш ответ на вопрос