想要将cookie传递给webview以加载网页

时间:2015-08-12 19:38:54

标签: javascript android cookies webview jsoup

我使用jsoup成功登录网站,我在地图中获取了Jsoup cookies功能的cookie但是我很震惊。成功登录后我想在网页浏览中打开网站的网页,但网页重定向到登录页面,因为cookie未成功传递到webview,我不知道原因。该页面需要成功登录的cookie才能加载该页面

这是登录页面网址。

http://111.68.99.8/StudentProfile/

和页面我想在成功登录后加载

http://111.68.99.8/StudentProfile/PersonalInfo.aspx

这是MainActivity.java

package com.example.ebad.bu;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


public class MainActivity extends ActionBarActivity {


    String url = "http://111.68.99.8/StudentProfile/";
    Map<String, String> logingcookies;
    HashMap<String,String> hashMap;

    ProgressDialog progressDialog,progressDialoge;

    Button login, personal;
    TextView Enrollement, password, E;
    String enrol = "";
    String pass = "";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        login = (Button) findViewById(R.id.login_button);
        personal = (Button) findViewById(R.id.pers);

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Enrollement = (TextView) findViewById(R.id.Enrollment);
                enrol = Enrollement.getText().toString();

                password = (TextView) findViewById(R.id.password);
                pass = password.getText().toString();

                new Title().execute();


            }
        });



    }

    private class Title extends AsyncTask<Void, Void, Void> {
        String title;
        String father;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setTitle("Title");
            progressDialog.setMessage("Loading");
            progressDialog.setIndeterminate(false);
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                Connection.Response loginForm = Jsoup.connect(url).method(Connection.Method.GET).timeout(1000).execute();
                Document doc = loginForm.parse();
                String viewstate = doc.select("input[name=__VIEWSTATE]").attr("value");
                String stategenerator = doc.select("input[name=__VIEWSTATEGENERATOR]").attr("value");
                String Eventvalidation = doc.select("input[name=__EVENTVALIDATION]").attr("value");


                doc = Jsoup.connect(url)
                        .data("__LASTFOCUS", "")
                        .data("__EVENTTARGET", "")
                        .data("__EVENTARGUMENT", "")
                        .data("__VIEWSTATE", viewstate)
                        .data("__VIEWSTATEGENERATOR", stategenerator)
                        .data("__EVENTVALIDATION", Eventvalidation)
                        .data("ctl00$Body$ENROLLMENTTextBox$tb", enrol)
                        .data("ctl00$Body$ENROLLMENTTextBox$cv_vce_ClientState", "")
                        .data("ctl00$Body$PasswordTextBox$tb", pass)
                        .data("ctl00$Body$PasswordTextBox$cv_vce_ClientState", "")
                        .data("ctl00$Body$LoginButton", "Login")
                        .cookies(loginForm.cookies())
                        .post();

                logingcookies = loginForm.cookies();


                title = doc.select("div[id=ctl00_Accounts]").html();


            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {




            /*Intent showadditionmenu = new Intent(MainActivity.this,Per.class);
            //showadditionmenu.putStringArrayListExtra("logingcookies", (ArrayList<String>) logingcookies);
            showadditionmenu.putExtra("logingcookies", String.valueOf(logingcookies));
            MainActivity.this.startActivity(showadditionmenu);*/

          /*  Intent i = new Intent(MainActivity.this,Per.class);
            i.putExtra("hashMap",hashMap );
            startActivity(i);
*/
            hashMap = new HashMap<String,String>(logingcookies);
            Intent i = new Intent(MainActivity.this,wee.class);
            i.putExtra("hashMap",hashMap );
            startActivity(i);

          /*  E = (TextView) findViewById(R.id.message);
            E.setText(title);
            progressDialog.dismiss();*/
        }


    }

}

我已将保存的Cookie传递给在webivew中加载网页的活动。这是其他活动;

Wee.java

package com.example.ebad.bu;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Ebad on 11/8/2015.
 */
public class wee extends Activity {

    String url= "http://111.68.99.8/StudentProfile/PersonalInfo.aspx";
    HashMap<String ,String> hashMap;
    Map<String,String> map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        Intent intent = getIntent();
        hashMap = (HashMap<String,String>) intent.getSerializableExtra("hashMap");

        WebView webView = (WebView) findViewById(R.id.webviewe);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl(url,hashMap);

    }

}

有没有办法在不重新登录网页视图的情况下查看该网页?

1 个答案:

答案 0 :(得分:0)

尚未对其进行测试,但使用CookieManager无法正常使用。

用法应该是这样的:

CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie(); //optional
cookieManager.setAcceptCookie(true);

然后使用setCookie方法遍历您的Cookie。

注意:如果使用棒棒糖及以上,您还应使用setAcceptThirdPartyCookies

祝你好运。