Ich bin ein Neuling auf Android und das ist mein erstes Projekt auf Android. Ich kämpfe seit mehr als einem Tag mit "Authentifizierung" Problem. Ich habe mehrere Möglichkeiten ausprobiert, aber keiner von ihnen hat funktioniert.java.io.IOException: Keine Authentifizierung Herausforderungen gefunden
Grundsätzlich möchte ich eine REST-API aufrufen und Antwort erhalten. Ich bin sicher, dass es kein Problem in der API gibt, da ich dasselbe in einer anderen iOS-Anwendung verwende.
Ich übergeben Authorization-Header, aber immer noch Authentifizierung keine gefunden Nachricht wird angezeigt. Ich habe einige Fragen zu Stack Overflow in diesem Zusammenhang, aber einige von ihnen haben nicht funktioniert und einige ergeben keinen Sinn für mich.
Ich bekomme Statuscode 401
. Ich weiß, das bedeutet entweder keine Authentifizierung bestanden oder wenn bestanden, dann sind sie falsch. Hier bin ich sicher, dass meine bestandenen korrekt sind.
Unten ist mein Code:
try {
url = new URL(baseUrl);
}
catch (MalformedURLException me) {
Log.e(TAG, "URL could not be parsed. URL : " + baseUrl + ". Line : " + getLineNumber(), me);
me.printStackTrace();
}
try {
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(method);
urlConnection.setConnectTimeout(TIMEOUT * 1000);
urlConnection.setChunkedStreamingMode(0);
// Set HTTP headers
String authString = "username:password";
String base64Auth = Base64.encodeToString(authString.getBytes(), Base64.DEFAULT);
urlConnection.setRequestProperty("Authorization", "Basic " + base64Auth);
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.setRequestProperty("Content-type", "application/json");
if (method.equals("POST") || method.equals("PUT")) {
// Set to true when posting data
urlConnection.setDoOutput(true);
// Write data to post to connection output stream
OutputStream out = urlConnection.getOutputStream();
out.write(postParameters.getBytes("UTF-8"));
}
try {
// Get response
in = new BufferedInputStream(urlConnection.getInputStream());
}
catch (IOException e) {
Log.e(TAG, "Exception in getting connection input stream. in : " + in);
e.printStackTrace();
}
// Read the input stream that has response
statusCode = urlConnection.getResponseCode();
Log.d(TAG, "Status code : " + statusCode);
}
catch (ProtocolException pe) {
pe.printStackTrace();
}
catch (IllegalStateException ie) {
ie.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
urlConnection.disconnect();
}
Blick auf Screenshot von logcat:
Jede Hilfe würde geschätzt. Vielen Dank.
String authString = "username: password"; dieser "username: password" sollte gleich ihren strings sein, die ich im website developers model meine. für zB: sie können Loginid verwendet werden: Passwort wie das. – manivannan
@Akash haben Sie eine Lösung gefunden? – AsafK
@AsafK Grund war, dass HttpUrlConnection eine Ausnahme für Statuscode 400 und höher auslösen. Wir müssen mit dieser Ausnahme umgehen. In meinem Fall habe ich HttpClient anstelle von HttpUrConnection wegen seiner Behandlung aller Statuscodes verwendet. – Geek