关于webview里onPageFinished()方法中无法跳转新的Activity的问题

Eureka_w 2015-04-02 09:15:22
同题目,target=android-21下想在webview的onPageFinished()方法中实现Activity的跳转,由于版本在Android 4.4 以上,故在UI线程里实现的webview.loadUrl()方法,不知道哪里出了问题就是不能实现页面跳转,很急!望解答。

public class WebViewActivity extends Activity {

private WebView webView = null;
private ProgressDialog progressDialog = null;
private static final int DOWN_COMPLETE = 1;
private static final int AUTH_URL = 2;
private String url = null;

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == DOWN_COMPLETE) {
progressDialog.dismiss();
} else if (msg.what == AUTH_URL) {
if (msg.obj == null) {
toastNullURL();
return;
} else {
setURL(msg.obj.toString());
}
}
super.handleMessage(msg);
}
};

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

init();

// 新启动一个线程来获得授权页面网址
new Thread() {
@Override
public void run() {
String urlStr = AuthUtil.getAuthorizationURL();
Message msg = handler.obtainMessage();
msg.what = AUTH_URL;
msg.obj = urlStr;
handler.sendMessage(msg);
}
}.start();

}

// 返回有效授权页面,并显示在WebView中
private void setURL(String url) {
this.url = url;
webView.loadUrl(url);
}

// 无返回授权页面
private void toastNullURL() {
Toast.makeText(this, R.string.auth_url_empty, 3000).show();
}

@SuppressLint("JavascriptInterface")
public void init() {

if (progressDialog == null) {
progressDialog = new ProgressDialog(this);
}
progressDialog.setTitle("正在加载中...");
progressDialog.show();

webView = (WebView) findViewById(R.id.wv_oauth);
webView.getSettings().setJavaScriptEnabled(true);

webView.addJavascriptInterface(new JavascriptInterface(), "Methods");

webView.setWebViewClient(new WebViewClient() {

/*
* Notify the host application that a page has finished
* loading.(non-Javadoc)
*
* @see
* android.webkit.WebViewClient#onPageFinished(android.webkit.WebView
* , java.lang.String)
*/
@SuppressLint("NewApi")
@Override
public void onPageFinished(WebView view, String url) {

if (url.equals("http://api.t.sina.com.cn/oauth/authorize")) {

String load = "javascript:window.Methods.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');";

view.evaluateJavascript(load, new ValueCallback<String>() {

@Override
public void onReceiveValue(String value) {
Log.i("main", value + "-----");
}
});

// view.loadUrl(load);

Intent intent = new Intent(WebViewActivity.this,
AccessTokenActivity2.class);
startActivity(intent);
// view.loadUrl(load);

}
super.onPageFinished(view, url);
}

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

// 覆盖WebChromeClient,实现更新进度框等功能
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (100 == newProgress) {
handler.sendEmptyMessage(DOWN_COMPLETE);
}
super.onProgressChanged(view, newProgress);
}
});
}

}

...全文
3023 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuan321789 2016-08-03
  • 打赏
  • 举报
回复
楼主解决了没有?我的授权页面只能进去一次,
qq_15052871 2015-11-11
  • 打赏
  • 举报
回复
4.4版本以上使用这个有差异 public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:window.foo.show('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); super.onPageFinished(view, url); } // 自定义的类 final class MyObj{ @JavascriptInterface//必须加这个 public void show(String html){ // html就是获取到的页面 } }
我是空白纸 2015-10-24
  • 打赏
  • 举报
回复
一样的问题,楼主解决了没有
Eureka_w 2015-04-03
  • 打赏
  • 举报
回复
引用 2 楼 jeky198306 的回复:
从日志中看是类没有找到,看是不是少了jar包
jar包应该是不缺
jeky_zhang2013 2015-04-02
  • 打赏
  • 举报
回复
从日志中看是类没有找到,看是不是少了jar包
Eureka_w 2015-04-02
  • 打赏
  • 举报
回复
补一下LogCat里error信息: 04-02 21:23:34.006: E/dalvikvm(28488): threadid=11: calling run(),name=Thread-7248 04-02 21:23:36.309: E/dalvikvm(28488): threadid=12: created from interp,name=WebViewCoreThread 04-02 21:23:36.319: E/dalvikvm(28488): threadid=12: calling run(),name=WebViewCoreThread 04-02 21:23:36.319: E/dalvikvm(28488): threadid=13: created from interp,name=CookieSyncManager 04-02 21:23:36.319: E/dalvikvm(28488): threadid=13: calling run(),name=CookieSyncManager 04-02 21:23:36.319: E/dalvikvm(28488): threadid=14: created from interp,name=Thread-7251 04-02 21:23:36.329: E/dalvikvm(28488): threadid=14: calling run(),name=Thread-7251 04-02 21:23:36.339: E/dalvikvm(28488): threadid=15: created from interp,name=AsyncTask #1 04-02 21:23:36.349: E/dalvikvm(28488): threadid=14: exiting,name=Thread-7251 04-02 21:23:36.349: E/dalvikvm(28488): threadid=15: calling run(),name=AsyncTask #1 04-02 21:23:36.399: E/dalvikvm(28488): threadid=14: created from interp,name=SharedPreferencesImpl-load 04-02 21:23:36.399: E/dalvikvm(28488): threadid=14: calling run(),name=SharedPreferencesImpl-load 04-02 21:23:36.399: E/dalvikvm(28488): threadid=14: exiting,name=SharedPreferencesImpl-load 04-02 21:23:36.399: E/dalvikvm(28488): threadid=14: created from interp,name=Thread-7254 04-02 21:23:36.399: E/dalvikvm(28488): threadid=14: calling run(),name=Thread-7254 04-02 21:23:36.419: E/dalvikvm(28488): Could not find class 'javax.activation.MimetypesFileTypeMap', referenced from method weibo4j.http.HttpClient.multPartURL 04-02 21:23:36.709: E/dalvikvm(28488): threadid=14: exiting,name=Thread-7254 04-02 21:23:36.759: E/Diag_Lib(28488): Diag_LSM_Init: Failed to open handle to diag driver, error = 13 04-02 21:23:36.769: E/chromium(28488): external/chromium/net/disk_cache/stat_hub.cc:216: [0402/212336:ERROR:stat_hub.cc(216)] StatHub::Init - App com.example.weibo isn't supported. 04-02 21:23:36.769: E/chromium(28488): external/chromium/net/disk_cache/stat_hub.cc:216: [0402/212336:ERROR:stat_hub.cc(216)] StatHub::Init - App com.example.weibo isn't supported.

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧