繁体   English   中英

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

[英]Android Java access WebView in MainActivity from other class

我有public class MyFirebaseInstanceIdService ,可在应用程序在后台处理public class MyFirebaseInstanceIdService通知。

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

主要活动

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因此可以调用loadUrl sendRegToken()是一种非静态方法,我正在尝试从静态上下文访问它。 我不能使sendRegToken()静态,因为它包含非静态的webView 我该如何解决这个问题?

使用类LocalBroadcastManager示例可以在这里找到: LocalBroadcastManager示例 1.在MainActivity上注册广播。 2.使用onTokenRefesh()发送中需要的参数从onTokenRefesh()发送广播。

请不要这样做。

如果您有用于此通信的API,请仅使用常规的Http请求,如果没有API,请参阅

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

免责声明:尚未尝试,但从理论上讲应该可以...

使用观察者模式。

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);
        } 
    }
}

并定义该接口

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

在“活动”中,您需要实现该接口

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener, 
    TokenRefreshListener {

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

     // need to call addTokenListener of the service 
     //... Probably do that in onStart method

     @Override
    public void onTokenRefresh(String token) {
        webView.loadUrl("javascript:sendRegToken('"+token+"');");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM