Jestem początkującym użytkownikiem Androida i jest to mój pierwszy projekt na Androida. Zmagam się z problemem "uwierzytelniania" przez ponad jeden dzień. Próbowałem kilku opcji, ale żaden z nich nie działał.java.io.IOException: Nie znaleziono żadnych problemów z uwierzytelnianiem
Zasadniczo chcę wywołać interfejs API REST i uzyskać odpowiedź. Jestem pewien, że nie ma problemu z API, ponieważ używam tego samego w innej aplikacji na iOS.
Przepuszczam nagłówek autoryzacji, ale nadal uwierzytelnianie nie znaleziono komunikatu znalezionego. Znalazłem kilka pytań na temat stackoverflow związanych z tym, ale niektóre z nich nie działały, a niektóre nie mają dla mnie sensu.
Otrzymuję kod stanu 401
. Wiem, że oznacza to, że żadne uwierzytelnienie nie zostało przekazane lub jeśli zostało przekazane, wtedy są one błędne. Jestem pewien, że moje zdane są poprawne.
Poniżej jest mój kod:
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();
}
Spójrz na zrzut ekranu LogCat:
Każda pomoc będzie mile widziane. Dziękuję Ci.
String authString = "username: password"; ta "nazwa użytkownika: hasło" powinna być równa ich ciągom, co mam na myśli w modelu programistów Witryny. na przykład: mogą używać Loginid: hasło w ten sposób. – manivannan
@Akash czy znalazłeś rozwiązanie tego problemu? – AsafK
@AsafK Powodem było to, że HttpUrlConnection podniósł wyjątek dla kodu stanu 400 i powyżej. Musimy poradzić sobie z tym wyjątkiem. W moim przypadku wykorzystałem HttpClient zamiast HttpUrlConnetion ze względu na obsługę wszystkich kodów statusu. – Geek