Android Java从其他类访问MainActivity中的WebView

时间:2017-08-15 15:21:07

标签: java android firebase firebase-notifications

当应用在后台时,我有public class MyFirebaseInstanceIdService来处理firebase通知。

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
    @Override
    public void onTokenRefresh() {
        MainActivity.sendRegToken();
    }
}

MainActivity

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

    WebView webView = (WebView) findViewById(R.id.webView);

    public void sendRegToken() {
        String recent_token = FirebaseInstanceId.getInstance().getToken();
        webView.loadUrl("javascript:sendRegToken('"+recent_token+"');");
    }
}

我需要访问webView,因此我可以致电loadUrlsendRegToken()是一种非静态方法,我试图从静态上下文中访问它。我无法使sendRegToken()成为静态,因为它包含非静态webView。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

使用课程LocalBroadcastManager 可以在此处找到示例:LocalBroadcastManager Example 1.在MainActivity上广播。 2.使用您在Intent发送中需要的参数从onTokenRefesh()发送广播。

答案 1 :(得分:0)

请不要这样做。

如果您有此通讯的API,请使用正常的Http请求,如果您没有API,请参阅this

顺便说一下,Greenrobot / EventBus的方式比LocalBroadCastManager更好更简单。

答案 2 :(得分:0)

免责声明:Haven没有尝试过,但从理论上说它应该有用......

使用观察者模式。

itemsChanged(items) {
  var me = this;

  me.setState({item : items}, function(){
         console.log("ITEMS : ", me.state.item);
    });
}

并定义该接口

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {

    List<TokenRefreshListener> tokenListeners = new ArrayList<>();

    public void addTokenListener(TokenRefreshListener listener) {
       tokenListeners.add(listener);
   } 

  // Should also add a remove method

    @Override
    public void onTokenRefresh() {
        String token = getToken();
        for (TokenRefreshListener l:tokenListeners) {
            l.onTokenRefresh(token);
        } 
    }
}

在Activity中,您需要实现该接口

public interface TokenRefreshListener {
    void onTokenRefresh(String token);
}