私のラップトップ(サーバー)とAndroidアプリ(クライアント)の間にhttps接続を確立しようとしています。 私のhttpsサーバは、chromeや他のPythonスクリプトと接続しようとする限り、(暗号化証明書付きの)pythonスクリプトとして動作しています。AndroidからPythonへHTTPS GETリクエストを送信していません。
私はアンドロイドアプリでクライアントを実装したかったのです。 HttpURLConnection Reference on Android Developersに基づいて(
<uses-permission android:name="android.permission.INTERNET"/>
をし、私のMainActivity.java
に次の行を追加:そこで私はAndroidManifest.xml
に権限を追加しました!
public void onButtonClicked(String message) {
try {
URL url = new URL("https://foo.bar.com/");
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
OutputStream output = new BufferedOutputStream(urlConnection.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
mSecondFragment.updateMessage(message);
}
私はちょうど私のHTTPSサーバへの接続を確立したい瞬間データを受け取らずに単純なGETリクエストを送信することをお勧めしますが、私の目標は、サーバーによって処理されるGET
要求と一緒に追加のキー値ペアを解析することです。
"https://foo.bar.com?a=1"
私はそれをできるだけシンプルに保つようにしました(その理由は私がjava.net.HttpURLConnection
を使用したかった理由です)が、問題は私が予想したほど些細なものではないと思います。
たぶん誰かが同じ問題に遭遇し、それを私を助けることができる:)
EDIT(@ atomicrat2552のおかげと@petey):
私はAsyncTaskとしてリクエストを処理し、追加のクラスを追加しました:
public class NetworkConnection extends AsyncTask<String, Void, NetworkConnection.Result> {
static class Result {
public String mResultValue;
public Exception mException;
public Result(String resultValue) {
mResultValue = resultValue;
}
public Result(Exception exception){
mException = exception;
}
}
protected NetworkConnection.Result doInBackground(String... urls) {
Result result = null;
HttpsURLConnection urlConnection = null;
try {
URL url = new URL(urls[0]);
urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
//urlConnection.connect();
result = new Result("Done");
}catch(Exception e) {
result = new Result(e);
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return result;
}
}
これはMainActivity.java
にonButtonClick簡便法につながる:
NetworkConnection nwConn = new NetworkConnection();
public void onButtonClicked(String message) {
nwConn.execute("https://foo.bar.com");
mSecondFragment.updateMessage(message);
}
もう一度やり直すことができる小さな作業コードを得るために、コードを単純化しようとしました。 アプリはもうクラッシュしませんが、私のサーバーは依然としてリクエストを表示しません。私の携帯電話でブラウザを使用している場合は、すべて正常に動作します。何か案が?
例外が発生していますか? Logcat? – LordRaydenMK
あなたは[urlConnection.connect()](https://developer.android.com/reference/java/net/URLConnection.html#connect())を呼び出すことを忘れていますか? – Jon
いいえ、接続する必要はありません、彼はNOMTExceptionを取得しています。 *おそらく誰かが同じ問題に遭遇した可能性があります*ええと、bazillion人、あなたの例外を検索 – Selvin