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

The connection will not persist when the activity is moved to the background. I cannot tell from your posted code, but I believe you should be using an AsyncTask for this connection. This is coming from my experience pulling HTML source from a link.

This question may answer yours: What to do with AsyncTask in onPause()?

于 2013-01-14T15:38:49.060 回答
0

实际上,您需要更改两件事,而不仅仅是一件事。

任何需要在活动之间保持持久性的事情都应该在服务中完成,而不是在活动的代码中。

其次,在最近的 Android 版本中,所有联网都必须从后台线程完成,而不是 UI 线程(一直建议不要使用 UI 线程联网,但现在它会触发异常)。只是将代码放在服务中并不意味着它在另一个线程中。

所以答案是您应该使用其中一种后台线程机制来执行此操作,并在服务中执行此操作。

于 2013-01-14T15:54:20.993 回答