2017-01-31 10 views
-1

私のラップトップ(サーバー)と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); 

} 

もう一度やり直すことができる小さな作業コードを得るために、コードを単純化しようとしました。 アプリはもうクラッシュしませんが、私のサーバーは依然としてリクエストを表示しません。私の携帯電話でブラウザを使用している場合は、すべて正常に動作します。何か案が?

+2

例外が発生していますか? Logcat? – LordRaydenMK

+1

あなたは[urlConnection.connect()](https://developer.android.com/reference/java/net/URLConnection.html#connect())を呼び出すことを忘れていますか? – Jon

+1

いいえ、接続する必要はありません、彼はNOMTExceptionを取得しています。 *おそらく誰かが同じ問題に遭遇した可能性があります*ええと、bazillion人、あなたの例外を検索 – Selvin

答えて

0

私がここで見る最も一般的な落とし穴は、ネットワークコードをUIスレッドで実行できないため、ネットワークコールを行うために何らかのバックグラウンドワーカーを使用する必要があることです。開発者サイトには、これを行う方法についてa basic guideがあります。

+0

ありがとう!基本的なGETリクエストを実行するために必要なコード部分を追加しました。 (私は@peteyが言及していたコードを比較した)。アプリはスムーズに実行されていますが、私のサーバーはまだリクエストを受け付けません。私の携帯電話でブラウザを使用している場合は、すべてうまく見えます。最初の質問を編集し、結果のコードを追加します。 – SbY

関連する問題