1

问题:我需要同时调用两个 URL 来验证我的会话并直接进入我的主页(或其他)页面。我试图通过 HTTPClient 调用我的第一个 URL 并验证会话(可以调用登录)。现在第二次调用是直接通过 WebView 进行的,这样我就可以访问我的主页,而不是登录页面。

下面是我的代码。我参考了很多链接和博客,但对我没有用。我把我的代码放在这里。如果有的话,请提供您的意见。

package com.example.samplewebview;

import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity {

WebView myWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    CookieSyncManager.createInstance(MainActivity.this);
    myWebView = (WebView)findViewById(R.id.webView1);

    new WebViewTask().execute();


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private class WebViewTask extends AsyncTask<Void, Void, Boolean> {
    String sessionCookie;
    CookieManager cookieManager;
    String url1 = "http://domain.com/validateURL=sessionid";
    String url2 = "http://domain.com/WebViewURLToLoad";

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    protected Boolean doInBackground(Void... param) {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        //HttpGet httpGet = new HttpGet(url1);
        HttpUriRequest request = new HttpGet(url1);
        try {
            HttpResponse response = httpClient.execute(request);

            List<Cookie> cookies = httpClient.getCookieStore().getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                Cookie cookie = cookies.get(i);
                System.out.println("Name : "+cookie.getName()+" --- Value"+cookie.getValue());
            }


            cookieManager = CookieManager.getInstance();

            //cookieManager.acceptCookie();
            sessionCookie = cookieManager.getCookie(url1);

            //sessionCookie = new PersistentConfig(getApplicationContext()).getCookieString();
            //sessionCookie = new String("test");
            if (sessionCookie != null) {
                cookieManager.removeSessionCookie(); 
            }
            CookieSyncManager.createInstance(getApplicationContext()).sync();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        SystemClock.sleep(1000);
        return false;
    }
    @Override
    protected void onPostExecute(Boolean result) {


        myWebView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageStarted(WebView view, String url,
                    Bitmap favicon) {
                if (sessionCookie != null) {
                    cookieManager.setCookie(url2, sessionCookie);
                    CookieSyncManager.getInstance().sync();
                    Toast.makeText(getApplicationContext(), url2, Toast.LENGTH_LONG).show();
                }
                //super.onPageStarted(view, url, favicon);
            }
        });

        myWebView.loadUrl(url2);

    }
}

}
4

0 回答 0