Erreur d'authentification: l'Impossibilité de répondre à tous ces défis: {} Android - 401 non autorisé

Erreur d'authentification: l'Impossibilité de répondre à tous ces défis: {} Android - 401 non autorisé

J'ai pris de référence à partir de ce lien
Erreur d'authentification lors de l'utilisation de HttpPost avec DefaultHttpClient sur Android

Je suis en train de travailler sur l'application android en l'ayant soutenu dans Drupal. Dans ce que je fais l'envoi de données à partir de l'application android de site web avec drupal - webservice au format JSON. Maintenant je peux lire les données JSON à partir de Drupal webservice et de l'écrire dans mon application android. Mais face au problème en écrivant sur drupal à partir d'android, il génère de la réponse avec le code d'état

401 non autorisé

De android application native, il génère 401 , tandis qu'à partir de phonegap-à partir d'android lorsque je lance une requête AJAX, il fonctionne parfaitement & rédige un article ou une page sur un site web avec drupal. ce qui signifie que le webservice de travail parfaitement &

mon phonegap application android fonctionne parfaitement il y a un problème avec Android natif de l'application JAVA
Je suis en cours d'exécution de mon application android sur Android2.3.4 -> Samsung Galaxy
S Plus - pour Samsung GT-I9001

voici mon code java pour 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;
}
}
}

voici le logcat que je reçois.

 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

Voici mon PhoneGap requête Ajax, il fonctionne parfaitement.

$('#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 :

J'ai essayé diverses méthodes pour Apache httpclient pour mon erreur.Pendant ce temps, j'ai fait quelques recherches et cherché sur google et trouvé quelques trucs intéressant.

1er chose que j'ai trouvé que Android-Google a Officiellement recommande de ne pas Apache HttpClient que j'utilise dans mon code. Suivez ce lien. Dans le Lien du message de Jesse Wilson, de la Dalvik équipe. Ils suggèrent d'utiliser HttpURLConnection au lieu de DefaultHttpClient et également écrit que Android équipe plus se développer Apache httpclient . la plus ancienne version que j'utilise.

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

2e chose que j'ai trouvé la forme de ce lien. Il suggère que Android est livré avec Apache HttpClient 4.0 Bêta 2, qui a un piège, quand il s'agit de l'Authentification de Base. La méthode d'Authentification que j'utilise est de HttpClient 3.x , que j'ai trouvé à partir de ce lien.
vérifier le lien.
http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication

De sorte que la version en question.

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

J'ai aussi trouvé quelques liens avec le potentiel de la solution de ce problème.

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

Apache HttpClient sur Android 4.1

Quelle version d'Apache HTTP Client est livré dans Android 1.6?

À partir de ces liens , j'ai fait la conclusion que, si nous nous mettre à jour Apache HttpClient à la dernière version stable , alors ce problème peut être résolu.

Mais ce n'est pas directement possible , comme Android Équipe a officiellement cessé de le soutenir pour Apache httpclient.

Avec ce lien, Il pourrait être possible de résoudre. Je n'ai pas essayé, mais je suis en train de travailler sur elle.

C'est la bibliothèque qui peut aider dans la mise à niveau de httpclient version Android.

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

L'autre solution pourrait être d'utiliser HttpURLConnection .Je travaille également sur elle.

Mais la plupart des gens ici sur stackoverflow et Internet semble à l'aide de DefaultHttpCLient avec Android. Et bien sûr c'est aussi de travailler avec moi tout au long de ma candidature, y compris la connexion,l'enregistrement,la lecture à partir du serveur et de la session et d'autres fonctionnalités.Seulement il ne fonctionne pas directement avec poster d'article pour mon serveur site web avec Drupal.
Il fonctionne parfaitement avec la POSTE demande lors de l'inscription de l'utilisateur sur le serveur.

Alors , mes amis, des suggestions concernant ce ? pourquoi il ne fonctionne pas seulement avec de la publication de l'article ?

J'ai également vu cette question stackoverflow.com/questions/10407547/... & il a essayé dans mon code ... en passant le nom d'utilisateur & mot de passe , mais il ne fonctionne toujours pas. Toujours la même réponse - > 401
Essayez de stackoverflow.com/questions/8022800/...
Je ne suis pas face à problème avec phonegap ... fonctionne parfaitement ... j'ai un problème avec Android application Java. Voici donc ma question est : le même serveur fonctionne avec Phonegap , alors pourquoi il ne fonctionne pas avec android.
401 non autorisé est répondu si la méthode appelée par l'Application Android ne sont pas compatibles avec le Service web sur le Serveur OU les paramètres que vous ajoutez à la méthode lors de l'envoi de la Demande. J'ai aussi été confronté au départ, ce problème lors de la connexion avec le Site Magento,mais a donné la raison pour cela.Vérifier la demande que vous envoyez, de Sorte que vous pouvez obtenir l'Idée, avec la demande d'appel. @Rahul Patel...
Grâce Haresh pour la réponse. oui j'ai vérifié tous les paramètres sont les mêmes que ma requête ajax dans phonegap. Mais Android, et il ne fonctionne toujours pas. Donc, je suis en train de travailler sur HttpUrlConnection pour résoudre cette erreur.Et aussi d'essayer d'autres méthodes de DefaultHttpClient pour cela.

OriginalL'auteur Mobile Tech. | 2012-08-09