Okay,
zuerst einmal was passieren soll: Die Webview soll man wie einen Browser verwenden können, wenn man sie startet sollte sich die App automatisch einloggen, tut sie auch, und auch wenn man irgendwo klickt, sollte man eingeloggt bleiben.
Das Problem ist, das sobald man auf irgendwo klickt man nicht mehr eingeloggt ist, es kommt aber keine Fehlermeldung wie z.B: Passwort falsch, Cookies deaktiviert etc. !
Es ist also so als hätte der Login Prozess davor nie stattgefunden.
Die Authentifikation funktioniert aber beim ersten Mal, also muss es irgentetwas damit zutun haben, weil bei einem Klick nur mehr dieser Code ausgeführt wird:
1mWebView.setWebViewClient(new WebViewClient() {
2 private WebView views;
3 private String urls;
4
5 public boolean shouldOverrideUrlLoading(WebView view,
6 String url) {
7 // do your handling codes here, which url is the
8 // requested url
9 // probably you need to open that url rather than
10 // redirect:
11 Log.d("CLICK", "CLICK");
12 this.views = view;
13 this.urls = url;
14 dialog = ProgressDialog.show(Elearn.this, "",
15 "Loading. Please wait...", true);
16
17 new Thread(new Runnable() {
18 public void run() {
19 views.loadUrl(urls);
20 while (views.getProgress() < 100) {
21
22 }
23 dialog.dismiss();
24 }
25 }).start();
26
27 return false; // then it is not handled by default
28 // action
29 }
Und hier die ganze Activity:
1package kimrac09.htl.kaindorf;
2
3import java.io.IOException;
4import java.text.SimpleDateFormat;
5import java.util.ArrayList;
6import java.util.Date;
7import java.util.List;
8
9import org.apache.http.HttpResponse;
10import org.apache.http.NameValuePair;
11import org.apache.http.client.HttpClient;
12import org.apache.http.client.HttpResponseException;
13import org.apache.http.client.entity.UrlEncodedFormEntity;
14import org.apache.http.client.methods.HttpPost;
15import org.apache.http.impl.client.BasicResponseHandler;
16import org.apache.http.impl.client.DefaultHttpClient;
17import org.apache.http.message.BasicNameValuePair;
18import org.apache.http.params.HttpConnectionParams;
19
20import android.app.Activity;
21import android.app.ProgressDialog;
22import android.content.Intent;
23import android.os.Bundle;
24import android.os.StrictMode;
25import android.util.Log;
26import android.view.View;
27import android.webkit.CookieManager;
28import android.webkit.CookieSyncManager;
29import android.webkit.WebSettings;
30import android.webkit.WebView;
31import android.webkit.WebViewClient;
32import android.webkit.WebSettings.ZoomDensity;
33
34public class Elearn extends Activity {
35
36 private static final int TIMEOUT_MS = 3000;
37 private WebView mWebView;
38 private static final String redirURL = "MEINEURL/index.php";
39 private ProgressDialog dialog;
40 private String endResult;
41 private String username = "";
42 private String password = "";
43
44 @Override
45 protected void onCreate(Bundle savedInstanceState) {
46 // TODO Auto-generated method stub
47 super.onCreate(savedInstanceState);
48
49 Bundle b = getIntent().getExtras();
50 username = b.getString("username");
51 password = b.getString("password");
52
53 setContentView(R.layout.webview);
54 dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
55 new Thread(new Runnable() {
56 public void run() {
57 // ------------------ COOKIES -----------------------//
58 CookieSyncManager.createInstance(Elearn.this);
59 CookieManager cookieManager = CookieManager.getInstance();
60 Date dateObj = new Date();
61
62 dateObj.setTime(dateObj.getTime() + 2 * 7 * 24 * 60 * 60 * 1000);
63 String sA = "acc=" + 0;
64 String sL = "lgn=";
65 SimpleDateFormat postFormater = new SimpleDateFormat(
66 "EEE MMM dd yyyy HH:mm:ss zzz");
67 String oD = postFormater.format(dateObj);
68 String cookieString = "logondata=" + sA + "&" + sL
69 + "; expires=" + oD;
70 cookieManager.setCookie(redirURL, cookieString);
71 CookieSyncManager.getInstance().sync();
72
73 // ------------------ WEBVIEW -----------------------//
74
75 mWebView = (WebView) findViewById(R.id.webview1);
76
77 WebSettings webSettings = mWebView.getSettings();
78 webSettings.setSavePassword(true);
79 webSettings.setSaveFormData(true);
80 webSettings.setJavaScriptEnabled(true);
81 webSettings.setSupportZoom(true);
82 webSettings.setDefaultZoom(ZoomDensity.FAR);
83
84 mWebView.setWebViewClient(new WebViewClient() {
85 private WebView views;
86 private String urls;
87
88 public boolean shouldOverrideUrlLoading(WebView view,
89 String url) {
90 // do your handling codes here, which url is the
91 // requested url
92 // probably you need to open that url rather than
93 // redirect:
94 Log.d("CLICK", "CLICK");
95 this.views = view;
96 this.urls = url;
97 dialog = ProgressDialog.show(Elearn.this, "",
98 "Loading. Please wait...", true);
99
100 new Thread(new Runnable() {
101 public void run() {
102 views.loadUrl(urls);
103 while (views.getProgress() < 100) {
104
105 }
106 dialog.dismiss();
107 }
108 }).start();
109
110 return false; // then it is not handled by default
111 // action
112 }
113
114 });
115
116 // ------------------------------ HTTP 4.0 REDIRECT
117 // --------------------------//
118
119 HttpClient httpClient = new DefaultHttpClient();
120 HttpConnectionParams.setConnectionTimeout(
121 httpClient.getParams(), TIMEOUT_MS);
122 HttpConnectionParams.setSoTimeout(httpClient.getParams(),
123 TIMEOUT_MS);
124 HttpPost httpPost = new HttpPost(redirURL);
125 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
126 nameValuePairs
127 .add(new BasicNameValuePair("username", username));
128 nameValuePairs
129 .add(new BasicNameValuePair("password", password));
130 HttpResponse end = null;
131 endResult = null;
132
133 try {
134 httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
135 HttpResponse response = httpClient.execute(httpPost);
136 end = response;
137 } catch (Exception e) {
138 // TODO Auto-generated catch block
139 e.printStackTrace();
140 }
141
142 BasicResponseHandler myHandler = new BasicResponseHandler();
143
144 try {
145 endResult = myHandler.handleResponse(end);
146 } catch (HttpResponseException e) {
147 // TODO Auto-generated catch block
148 e.printStackTrace();
149 } catch (IOException e) {
150 // TODO Auto-generated catch block
151 e.printStackTrace();
152 }
153
154 mWebView.loadData(endResult, "text/html", "utf-8");
155 while (mWebView.getProgress() < 100) {
156
157 }
158 dialog.dismiss();
159 }
160 }).start();
161
162 }
163
164 public void onBack(View view) {
165 Intent intent = new Intent();
166 setResult(RESULT_OK, intent);
167 intent.setClass(this, HTLKaindorf.class);
168 finish();
169 }
170}
Lg
— geändert am 15.01.2012, 18:40:08
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.