Android 使用DefaultHttpClient保持活动之间的连接

Android 使用DefaultHttpClient保持活动之间的连接,android,android-activity,httpclient,keep-alive,Android,Android Activity,Httpclient,Keep Alive,我正在开发一个向SAP发送请求的应用程序,我一直在努力在应用程序中保持连接 我有三个活动:主活动、连接活动和列表活动 当我启动应用程序时,当我点击connection在SAP和设备之间建立连接并成功连接后,应用程序将转到main 我遇到的问题是,当我按下返回按钮到main并转到list activity时,我无法检索数据,因为我丢失了具有连接的DefaultHttpClient public String logInToSAP(String PIP, int PPort, String PSch

我正在开发一个向SAP发送请求的应用程序,我一直在努力在应用程序中保持连接

我有三个活动:主活动、连接活动和列表活动

当我启动应用程序时,当我点击connection在SAP和设备之间建立连接并成功连接后,应用程序将转到main

我遇到的问题是,当我按下返回按钮到main并转到list activity时,我无法检索数据,因为我丢失了具有连接的DefaultHttpClient

public String logInToSAP(String PIP, int PPort, String PSchema, String PUser, String PPassword) {
    String result = "";

    //      HttpHost targetHost = new HttpHost(PIP, PPort, PSchema);
    HttpHost targetHost = new HttpHost(PIP, PPort, PSchema);

    //          DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getCredentialsProvider().setCredentials(new AuthScope(targetHost.getHostName(), 
            targetHost.getPort()), new UsernamePasswordCredentials(PUser, PPassword));

    // Create AuthCache instance
    AuthCache authCache = new BasicAuthCache();

    // Generate BASIC scheme object and add it to the local auth cache
    BasicScheme basicAuth = new BasicScheme();
    authCache.put(targetHost, basicAuth);

    // Add AuthCache to the execution context
    BasicHttpContext localcontext = new BasicHttpContext();
    localcontext.setAttribute(ClientContext.AUTH_SCHEME_PREF, authCache);

    HttpGet request = new HttpGet("/sap/z_conn");

    ResponseHandler<String> handler = new BasicResponseHandler();
    try {
        result = httpclient.execute(targetHost, request, handler);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        Toast.makeText(this, "Wrong Connection Parameters", Toast.LENGTH_SHORT).show();         
        result = "Wrong Connection Parameters";
    } catch (IOException e) {
        e.printStackTrace();            
        Toast.makeText(this, "IOException", Toast.LENGTH_SHORT).show();
        result = "IOException";
    }
    return result;
}   
publicstringlogintosap(stringpip、int-PPort、stringpschema、stringpuser、stringppassword){
字符串结果=”;
//HttpHost targetHost=新的HttpHost(PIP、PPort、PSchema);
HttpHost targetHost=新的HttpHost(PIP、PPort、PSchema);
//DefaultHttpClient httpclient=新的DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(新的AuthScope(targetHost.getHostName()),
getPort()),新用户名密码凭证(PUser,PPassword));
//创建AuthCache实例
AuthCache AuthCache=new BasicAuthCache();
//生成基本方案对象并将其添加到本地身份验证缓存
碱性血红素碱性血红素=新碱性血红素();
authCache.put(targetHost,basicAuth);
//将AuthCache添加到执行上下文
BasicHttpContext localcontext=新的BasicHttpContext();
setAttribute(ClientContext.AUTH\u SCHEME\u PREF,authCache);
HttpGet请求=新的HttpGet(“/sap/z_conn”);
ResponseHandler=new BasicResponseHandler();
试一试{
结果=httpclient.execute(targetHost、request、handler);
}捕获(客户端协议例外e){
e、 printStackTrace();
Toast.makeText(这是“错误的连接参数”,Toast.LENGTH_SHORT).show();
结果=“连接参数错误”;
}捕获(IOE异常){
e、 printStackTrace();
Toast.makeText(这个“IOException”,Toast.LENGTH_SHORT).show();
结果=“IOException”;
}
返回结果;
}   

您可以扩展应用程序对象并将DefaultHttpClient放在其中

如何扩展和使用应用程序对象:

也许持久保存SAP设置的(会话)cookie就足够了?记忆中的单身汉应该就是这样。