Ich baue eine App, die bei meiner Arbeit mit einem internen Webserver kommuniziert, es hat einen Login-Prozess.MalformedURLException in Android Studio SDK 23, Website leitet an keine Präfix weiter
Das Problem ist, wenn ich die tatsächliche URL verwende, die funktioniert, bekomme ich eine MalformedURLException. Und wenn ich http: // mit der Adresse in meiner app, erhalte ich eine Fehlermeldung:
com.an[email protected]42c06aa0
Wenn ich hinzufügen http: // auf die Adresse in einem Browser wie Firefox oder Chrome, leitet die Seite zu sich selbst, aber ohne die http: //. Ich denke, es ist irgendwie so konzipiert, dass es nicht mit dem "http: //" Teil funktioniert, aber ich bin nicht sicher, wie ich das umgehen soll.
Ich habe jetzt ein paar Stunden über die Verwendung der HttpUrlConnection gesucht und alles, was ich gefunden habe, ist, dass das Protokoll mit URLs erforderlich ist.
So sieht mein Code jetzt aus, ich habe die tatsächliche URL aus Datenschutzgründen durch "MyServerName", "MyOrgName" ersetzt.
public class DoLogin extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Bundle extras = getIntent().getExtras();
String username = extras.getString("Username");
String password = extras.getString("Password");
String charset = "UTF-8";
String pageText = "";
try {
URL url = new URL("http://MyServerName.MyOrgName.k12.mo.us/service/login.asp?ucode=" + username + "&upassword=" + password);
//URL url = new URL("http://www.google.com/");
URLConnection connection = url.openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
pageText = response.toString();
} catch (MalformedURLException e) {
//Do something with the exception.
pageText = "MalformedURLException " + e.getMessage();
} catch (IOException e2) {
//Do something with the exception.
pageText = "IOException " + e2.getMessage();
} catch (NullPointerException e3) {
pageText = "NullPointerException " + e3.getMessage();
}
setData(pageText);
return null;
}
}
Meine Frage ist, wie kann ich entweder verwenden, um eine URL wie folgt aber ohne „http: //“, oder wie kann ich die Website oder DNS ändern, so dass es „http: //“ verwenden, oder stimmt etwas mit meinem Code nicht?
Wenn möglich, würde ich gerne ein paar Möglichkeiten vorgestellt haben.
Danke, Wayne
Hat der Server, den Sie auf eine andere Seite umleiten, wenn die Seite in Chrom öffnen? –
'Ich denke, es ist irgendwie entworfen, nicht mit dem" http: // "-Teil zu arbeiten. Es heißt" Protokoll "und es gibt immer einen bestimmten. In Ihrem Fall entweder "http" oder, da Sie wahrscheinlich am liebsten das Passwort über eine sichere Verbindung senden würden, "https". Hast du das probiert? –
"Ich bekomme einen Fehler" - das ist kein Fehler. Das ist die Ausgabe von 'toString()', die auf einem 'com.android.okhttp.internal.http.HttpTransport $ FixedLengthInputStream' Objekt aufgerufen wird. Wenn Sie abstürzen, möchten Sie möglicherweise die vollständige Stapelverfolgung in Ihrer Frage veröffentlichen. – CommonsWare