在问这个问题之前,我研究了很多,甚至尝试了ChatGPT。
我正在使用Volley将HTTP请求从android webview发送到在webview中运行的PHP应用程序,以插入正在生成的FCM令牌。这工作得很好,但它适用于每个页面加载,因为volley代码是在MainFragment.java
文件中的onPgeFinished()
方法中编写的。因此,一旦令牌成功插入,我想先检查一下webview中生成的令牌是否不同于在发出Volley请求之前插入数据库中的令牌,因为这会使页面加载变慢,并且不必要地在每次新加载/刷新页面时创建HTTP请求。为此,我需要从数据库中获取特定于用户的令牌值,并将其发送到webview的MainFragment.java
文件。经过大量研究和chatGPT使用,我尝试了以下方法:
JS在我的网站:
<script>
MyApp.userToken("<?php echo $token; ?>");
</script>
然后在网络视图中:
JavaScriptAPI.java
public class JavaScriptAPI {
private Activity mActivity;
private volatile String activeToken;
public JavaScriptAPI(Activity activity) {
mActivity = activity;
}
@JavascriptInterface
public void userToken(String token){
activeToken = token; // RECEIVES TOKEN SUCCESSFULLY AND OUTPUTS IN THE LOG BELOW
Logcat.d("Received Token: " + activeToken);
}
public String getActiveToken() {
return activeToken; // DOESN'T SET THE TOKEN RECEIVED IN THE ABOVE METHOD AND ALWAYS RETURNS NULL ( WHY ? )
}
}
然后在www.example.com中MainFragment.java我尝试调用getActiveToken()
来获取值,以便使用它。
MainFragment.java
JavaScriptAPI javaScriptAPI = new JavaScriptAPI(getActivity());
String phpVariableValue = javaScriptAPI.getActiveToken();
Logcat.d("PHP token value: " + phpVariableValue); // ALWAYS RETURNS NULL
我需要获取phpVariableValue
中的令牌值,以便在if
语句中使用它,并在创建volley请求之前将其与webview生成的令牌值匹配。解决方案是什么?
1条答案
按热度按时间svmlkihl1#
没关系。我有一个替代的解决方案。我不知道为什么它总是发生,当我挣扎了几天寻找一个解决方案,我从来没有得到它。但只要我张贴一个问题stackoverflow,我找到解决方案自己😑😑😑。
无论如何,解决方法是,我在文本字段中获取令牌值(如果需要,可以使用div或span或任何带有data属性的命令。随你的便!)
在网站中:
在Web视图中:
就是这样,我奋斗了整整一个星期,就是为了这样一个解决办法,祝你好运。
哦,是的,谢谢你ChatGPT😋。