Mantener sesión de cookies en Android

De acuerdo, tengo una aplicación de Android que tiene un formulario, dos EditText, un control giratorio y un botón de inicio de sesión. El usuario selecciona el servicio de la ruleta, escribe su nombre de usuario y contraseña y hace clic en iniciar sesión. Los datos se envían a través de POST, se devuelve una respuesta, se maneja, se inicia un nuevo WebView, se carga la cadena html generada a partir de la respuesta y tengo la página de inicio de cualquier servicio que el usuario haya seleccionado.

Eso está muy bien. Ahora, cuando el usuario hace clic en un enlace, no se puede encontrar la información de inicio de sesión, y la página le pide al usuario que inicie sesión nuevamente. Mi sesión de inicio de sesión se está descartando en algún lugar, y no estoy seguro de cómo pasar la información de la clase que controla la parte principal de mi aplicación a la clase que solo inicia la actividad de vista web.

El controlador onClick desde el botón de inicio de sesión del formulario:

private class FormOnClickListener implements View.OnClickListener {

    public void onClick(View v) {

        String actionURL, user, pwd, user_field, pwd_field;

        actionURL = "thePageURL";
        user_field = "username"; //this changes based on selections in a spinner
        pwd_field = "password"; //this changes based on selections in a spinner
        user = "theUserLogin";
        pwd = "theUserPassword";

        List<NameValuePair> myList = new ArrayList<NameValuePair>();
        myList.add(new BasicNameValuePair(user_field, use,r)); 
        myList.add(new BasicNameValuePair(pwd_field, pwd));

        HttpParams params = new BasicHttpParams();
        DefaultHttpClient client = new DefaultHttpClient(params);
        HttpPost post = new HttpPost(actionURL);
        HttpResponse response = null;
        BasicResponseHandler myHandler = new BasicResponseHandler();
        String endResult = null;

        try { post.setEntity(new UrlEncodedFormEntity(myList)); } 
        catch (UnsupportedEncodingException e) { e.printStackTrace(); } 

        try { response = client.execute(post); } 
        catch (ClientProtocolException e) { e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); }  

        try { endResult = myHandler.handleResponse(response); } 
        catch (HttpResponseException e) { e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); }

        List<Cookie> cookies = client.getCookieStore().getCookies();
        if (!cookies.isEmpty()) {
            for (int i = 0; i < cookies.size(); i++) {
                cookie = cookies.get(i);
            }
        }

       Intent myWebViewIntent = new Intent(MsidePortal.this, MyWebView.class);
       myWebViewIntent.putExtra("htmlString", endResult);
       myWebViewIntent.putExtra("actionURL", actionURL);
       startActivity(myWebViewIntent);
    }
}

Y aquí está la clase WebView que maneja la pantalla de respuesta:

public class MyWebView extends android.app.Activity {

    private class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.web);

        MyWebViewClient myClient = new MyWebViewClient();
        WebView webview = (WebView)findViewById(R.id.mainwebview);
        webview.getSettings().setBuiltInZoomControls(true); 
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.setWebViewClient(myClient);

        Bundle extras = getIntent().getExtras();
        if(extras != null) 
        {
            // Get endResult
            String htmlString = extras.getString("htmlString");
            String actionURL = extras.getString("actionURL");

            Cookie sessionCookie = MsidePortal.cookie;
            CookieSyncManager.createInstance(this);
            CookieManager cookieManager = CookieManager.getInstance();
            if (sessionCookie != null) {
                cookieManager.removeSessionCookie();
                String cookieString = sessionCookie.getName()
                        + "=" + sessionCookie.getValue()
                        + "; domain=" + sessionCookie.getDomain();
                cookieManager.setCookie(actionURL, cookieString);
                CookieSyncManager.getInstance().sync();
            }  

            webview.loadDataWithBaseURL(actionURL, htmlString, "text/html", "utf-8", actionURL);}
        }
    }
}

He tenido un éxito mixto al implementar esa solución de cookies. Parece que funciona para un servicio en el que inicio sesión y sé que mantiene las cookies en el servidor (antiguo, arcaico, pero funciona y no quieren cambiarlo). El servicio que estoy intentando ahora requiere que el usuario mantenga cookies en su máquina local, y no funciona con esta configuración.

¿Alguna sugerencia?

Respuestas a la pregunta(8)

Su respuesta a la pregunta