请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,问一下android端和vue端的通信问题

我在实现微信第三方登录时,在vue端调用了MyJavaScriptInterface里面的一个wxLogin()函数,然后在函数里使用wxApi.sendReq(req)。微信SDK接收请求后,在WXEntryActivity.java的onResp()中响应了数据。我想知道如何把onResp()中的响应数据通过JavaScriptInterface传回vue端。

还有就是我在使用老师封装好的WXHttpUtils.httpPost时,我在run()里面onCallBack()回调中拿到响应数据,这个响应数据如何通过JavaScriptInterface传回vue端

正在回答

1回答

你好:

1、如果想要把onResp()中的响应数据通过JavaScriptInterface传回vue端,这种是 原生通知 web 端的方式,可以在 vue 端为 window 对象绑定一个方法,然后在 android 端通过 webview 来调用,这里可以参考项目中 自动登录的处理方式。

2、第二个问题与第一个其实是同一种处理方案。都是属于原生端通知 web 端的问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 wambaoxiaoyiyi #1
    老师,我把MainActivity的webView设置成public static,然后在其他的activity用runOnUiThread(new Runnable(){
        @Override
        public void run(){
             MainActivity.mWebView.evaluateJavascript(...)
    }
    }) 
    这样写可以吗
    回复 有任何疑惑可以回复我~ 2020-04-29 11:27:20
  • Sunday 回复 提问者 wambaoxiaoyiyi #2
    这样写是非常危险的。因为你可能无法保证 MainAvtivity 中的 webview 实例依然存活。
    我建议当用户微信支付完成之后,跳转到 mainactivity 对应的 fragment 下,之后在完成对应的webview 操作。
    回复 有任何疑惑可以回复我~ 2020-04-29 15:17:26
  • 提问者 wambaoxiaoyiyi 回复 Sunday #3
    老师,我在登录activity中的onBackClick写上
    new Intent(WXEntryActivity.this,MainActivity.class)
    startActivity(intent)
    
    然后在AndroidMainifest.xml中把MainActivity设置成singleTask
    
    然后在MainActivity.java中重写onNewIntent(Intent intent),并setIntent(intent)。且新增getmWebView()方法返回webView实例
    
    然后在MainActivity.java的onResume()中add一个没有视图的fragment
    
    然后在fragment.java中的onCreateView里
    getActivity().getIntent()
    final MainActivity mainActivity = (MainActivity)getActivity()
    getActivity().runOnUiThread(new Runnable(){
       @Override
       public void run(){
            mainActivity.getmWebView().evaluateJavascript(....)
    }
    })
    感觉写得有点绕
    回复 有任何疑惑可以回复我~ 2020-05-06 11:16:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信