0

Tomcatサーバーにログオンするアプリを開発しています。HTTP GETリクエストを使用してこれを行っています。接続が成功すると、メッセージはバッファリングされたストリームを介して表示されます。

次のコードは、接続に使用されます。

public String getInternetData() throws Exception {


BufferedReader in = null;
String data = null;

try {
    HttpClient client = new DefaultHttpClient();
    client.getConnectionManager().getSchemeRegistry().register(getMockedScheme());
    URI website = new URI("https://ts.rks.com:8443/kss/login?username=hydm&password=pw1234"); 
    HttpGet request = new HttpGet();
    request.setURI(website);
    HttpResponse response = client.execute(request);
    response.getStatusLine().getStatusCode();

    in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    StringBuffer sb = new StringBuffer("");
    String l = "";
    String nl = System.getProperty("line.separator");
    while ((l = in.readLine()) != null) {
        sb.append(l + nl);
    }
    in.close();
    data = sb.toString();
    return data;
} finally {
    if (in != null) {
        try {
            in.close();
            return data;
        } catch (Exception e) {
            Log.e("GetMethodLogin", e.getMessage());
        }
    }
}

これは、ユーザーがログインアクティビティを介してログインしたときにアクティブ化されるコードです。メニュー画面に戻って、ユーザーのログインを必要とする別のアクティビティを実行しようとすると、ユーザーがログインしていないと表示されます。

ユーザーがアクティビティから離れたときに接続が切断されていますか、それとも接続が正しく確立されていませんか。

4

2 に答える 2

0

アクティビティがバックグラウンドに移動された場合、接続は維持されません。投稿されたコードからはわかりませんが、この接続にはAsyncTaskを使用する必要があると思います。これは、リンクからHTMLソースを取得した私の経験から来ています。

この質問はあなたに答えるかもしれません:onPause()のAsyncTaskをどうするか?

于 2013-01-14T15:38:49.060 に答える
0

実際には、1つだけでなく、2つの変更が必要です。

アクティビティ間で永続化する必要があることはすべて、アクティビティのコードではなく、サービスで実行する必要があります。

次に、最近のAndroidリリースでは、すべてのネットワークはUIスレッドではなく、バックグラウンドスレッドから実行する必要があります(UIスレッドネットワークに対する推奨事項は常にありましたが、現在は例外がトリガーされます)。コードをサービスに配置するだけでは、別のスレッドにあるとは限りません。

したがって、答えは、バックグラウンドのスレッドメカニズムの1つを使用してこれを実行し、サービス内で実行する必要があるということです。

于 2013-01-14T15:54:20.993 に答える