private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
webview的问题为什么不在webview页操作,为什么要在别的页操作,又不是adapter,为何非要这么写。。。
你的JsInterface子类是new出来的,里面的webview没有初始化,当然不能用了,
你的子类没有必要继承mainActivity,可以在构造函数里将webview传入到子类,就可以用了。
我在构造函数传入了webview还是无法使用。。
private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
你的JsInterface子类是new出来的,里面的webview没有初始化,当然不能用了,
你的子类没有必要继承mainActivity,可以在构造函数里将webview传入到子类,就可以用了。
我在构造函数传入了webview还是无法使用。。
private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
你的JsInterface子类是new出来的,里面的webview没有初始化,当然不能用了,
你的子类没有必要继承mainActivity,可以在构造函数里将webview传入到子类,就可以用了。
我在构造函数传入了webview还是无法使用。。
private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
按照您的写法写了,还是没反应。。页面不会跳转
你的JsInterface子类是new出来的,里面的webview没有初始化,当然不能用了,
你的子类没有必要继承mainActivity,可以在构造函数里将webview传入到子类,就可以用了。
我在构造函数传入了webview还是无法使用。。
private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
按照您的写法写了,还是没反应。。页面不会跳转
晕了,你以前没写过Android代码吗?可以的话把代码和需求贴出来。
你的JsInterface子类是new出来的,里面的webview没有初始化,当然不能用了,
你的子类没有必要继承mainActivity,可以在构造函数里将webview传入到子类,就可以用了。
我在构造函数传入了webview还是无法使用。。
private Webview mWebview;
public JsInterface(Webview webview,Context context){
mWebview=webView;
}
使用:new JsInterface(webview,this);
package com.example.gibub_app;
import com.example.gibub_app.JsInterface;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
public WebView webView;
public Object wv;
private ProgressBar progressbar;
private long mExitTime;
final Activity context = this;
Context mContext;
@SuppressLint({ "JavascriptInterface", "SetJavascriptEnabled" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = getApplicationContext();
webView = (WebView) findViewById(R.id.wv_js2java);
webView.addJavascriptInterface(new JsInterface(this,webView), "javaObj");
WebSettings wv = webView.getSettings();
wv.setJavascriptEnabled(true);
wv.setUseWideViewPort(true);
wv.setDisplayZoomControls(false);
webView.setWebViewClient(new webviewClient());
webView.loadUrl("http://www.zangyixue.cn/app/");
progressbar = (ProgressBar) findViewById(R.id.progressbar);
new Thread(new Runnable() {
@Override
public void run() {
setTitle("fengyi.hua");
}
});
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
if(webView.canGoBack()){
webView.goBack();
return false;
}else{
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
return false;
}else{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
}
return super.onKeyDown(keyCode, event);
}
class webviewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
//if(ShowImage == 1){
// webView.getSettings().setLoadsImagesAutomatically(true);
// }else{
// webView.getSettings().setLoadsImagesAutomatically(false);
// }
progressbar.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
progressbar.setVisibility(View.INVISIBLE);
super.onPageFinished(view, url);
//加载完成后执行交互任务
Version ver = new Version(getApplicationContext());
webView.loadUrl("Javascript:checkVersionShow(" + ver.GetVersion().toString() + ")");
}
}
}
package com.example.gibub_app;
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
public class JsInterface{
Context mContxt;
private WebView mWebView;
//private View view;
public JsInterface(Context mContxt,WebView webview) {
this.mContxt = mContxt;
mWebView = webview;
}
@JavascriptInterface
public void Msg(String name) {
switch(name){
case "1":
checkVersion(name);
break;
}
}
@JavascriptInterface
public String checkVersion(String name) {
return "1.1";
}
@JavascriptInterface
public void setDisplayImage(String name) {
if(name.equals("1")){
mWebView.loadUrl("http://www.baidu.com");
//().setLoadsImagesAutomatically(false);
Toast.makeText(mContxt, "已开启", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(mContxt, "已关闭", Toast.LENGTH_LONG).show();
}
}
}
//Toast.makeText(mContxt, "asdasadsa:" + name, Toast.LENGTH_SHORT).show();
//Toast.makeText(mContxt, "1.1", Toast.LENGTH_LONG).show();
window.javaObj.setDisplayImage("1");
你的代码应该是没有问题的啊,你是怎么调用的setDisplayImage的方法的,在HTML界面上这样调用:
window.javaObj.setDisplayImage("1");
上面都在回答些什么啊。。。。。。你的webview是在oncreate方法里才初始化的,子类继承了父类,可以使用父类非私有的成员变量,但是,你的webview在父类定义的时候没有初始化,所以子类当然不能用啊。
上面都在回答些什么啊。。。。。。你的webview是在oncreate方法里才初始化的,子类继承了父类,可以使用父类非私有的成员变量,但是,你的webview在父类定义的时候没有初始化,所以子类当然不能用啊。
你的代码应该是没有问题的啊,你是怎么调用的setDisplayImage的方法的,在HTML界面上这样调用:
window.javaObj.setDisplayImage("1");
要加window啊?
package com.elf.demo;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class WebViewTestActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_test);
webView = (WebView) findViewById(R.id.webView1);
webView.addJavascriptInterface(new JsInterface(this,webView), "javaObj");
WebSettings wv = webView.getSettings();
wv.setJavascriptEnabled(true);
wv.setUseWideViewPort(true);
wv.setDisplayZoomControls(false);
webView.loadUrl("file:///android_asset/webview1.html");
}
@Override
public void onBackPressed() {
if(webView.canGoBack()){
webView.goBack();
}else {
super.onBackPressed();
}
}
public class JsInterface{
Context mContxt;
private WebView mWebView;
private Handler mHandler=new Handler();
//private View view;
public JsInterface(Context mContxt,WebView webview) {
this.mContxt = mContxt;
mWebView = webview;
}
@JavascriptInterface
public void Msg(String name) {
switch(name){
case "1":
checkVersion(name);
break;
}
}
@JavascriptInterface
public String checkVersion(String name) {
return "1.1";
}
@JavascriptInterface
public void setDisplayImage(final String name) {
// if(name.equals("1")){
mHandler.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl(name);
}
});
//().setLoadsImagesAutomatically(false);
// Toast.makeText(mContxt, "已开启", Toast.LENGTH_LONG).show();
// }else{
// Toast.makeText(mContxt, "已关闭", Toast.LENGTH_LONG).show();
// }
}
}
}