从android中的另一个类调用MainActivity方法

时间:2019-01-24 10:40:30

标签: javascript java android webview

我正在开发一个Android应用。我想将一些值从webview传递给我的android应用程序。

我通过使用Passing data from java class to Web View html中给出的解决方案成功解决了这个问题。

我面临的问题是,当我尝试从MainActivity调用JavaScriptInterface.java方法时,这些方法没有被调用或没有给出错误。

这是我到目前为止尝试过的:

MainActivity act=new MainActivity();
act.myMethod() //This method is available in my activity

但没有被调用。

((MainActivity)getActivity).myMethod();

    public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.AppTheme);
        setContentView(R.layout.activity_main);
    }
    public void myMethod() {
        Toast.makeText(this, "Inside MainActivity", Toast.LENGTH_SHORT).show();
    }
}

//JavaScriptInterface class

    class JavaScriptInterface {
    Context mContext;

    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void onButtonClick(String toast1, String toast2) {
        Toast.makeText(mContext, toast1+" | "+toast2, Toast.LENGTH_SHORT).show(); //THIS IS WORKING
        MainActivity act=new MainActivity();
        act.myMethod(); //NOT WORKING
    }
}

2 个答案:

答案 0 :(得分:0)

从技术上讲,myMethod将被调用,但是由于您是自己创建MainActivity的,因此它没有附加任何内容。

通常,您不应以这种方式创建新的MainActivity实例。要打开新的MainActivity,请使用Intent。

在您的情况下,您应该具有对原始MainActivity实例的引用,并在其中调用此方法。请勿以任何方式创建新文件,因为您已经在运行它。

一种简单的解决方法:

MainActivity.this.myMethod("Hello there")

您不必存储mContext。您已经在MainActivity内部。

因此,完整的代码应为:

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView myWebView = findViewById(R.id.webview);
    myWebView.loadUrl("http://www.google.com");
    myWebView.addJavascriptInterface(new WebAppInterface(), "Android");
}

public void myMethod(String test){
    Toast.makeText(this, test, Toast.LENGTH_SHORT).show();

}

public class WebAppInterface {

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        MainActivity.this.myMethod("Hello there");
    }
}

}

事实上,我认为您甚至可以避免使用MainActivity.this.并直接致电myMethod

答案 1 :(得分:0)

您正在创建MainActivity的另一个对象,这就是为什么它不显示的原因。您正在将活动上下文传递给界面,所以您只需

null

MainActivity示例

((MainActivity)mContext).myMethod();

Check out android documentation for more info