У меня есть WebView в моем файле MainActivity, и я получаю уведомления pu sh в моем файле MyFirebaseMessagingService. Моя цель - обновлять мое локальное хранилище WebView всякий раз, когда я получаю новое уведомление.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
SharedPreferences settings = getApplicationContext().getSharedPreferences("mySettings", 0);
SharedPreferences.Editor editor = settings.edit();
final String myNewMessage = remoteMessage.getData().toString();
editor.putString("NEW_MESSAGE", myNewMessage);
editor.apply();
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
MainActivity myMain = new MainActivity();
myMain.updateLocalStorage(myNewMessage);
}
}, 1000 );
}
}
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished (WebView view, String url){
SharedPreferences settings = getApplicationContext().getSharedPreferences("mySettings", 0);
SharedPreferences.Editor editor = settings.edit();
String keyToken = "NEW_MESSAGE";
String myNewToken = settings.getString("NEW_TOKEN", "0");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("localStorage.setItem('"+ keyToken +"','"+ myNewToken +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ keyToken +"','"+ myNewToken +"');");
}
}
});
webView.setWebChromeClient(new WebChromeClient() );
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl("https://myreactjsapp.com/");
}
public void updateLocalStorage(String myNewMessage){
String keyToken = "NEW_MESSAGE";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("localStorage.setItem('"+ keyToken +"','"+ myNewMessage +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ keyToken +"','"+ myNewMessage +"');");
}
}
}
Используя приведенный выше код, я могу обновить локальное хранилище onPageFinished, считав значение из общих настроек. Но когда я пытаюсь обновить значение с помощью функции updateLocalStorage, вызванной onMessageReceived, я получаю сообщение об ошибке:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.evaluateJavascript(java.lang.String, android.webkit.ValueCallback)' on a null object reference
Кто-нибудь знает, что мне нужно сделать, чтобы иметь возможность запустить функцию updateLocalStorage из onMessageReceived без получение исключения NullPointerException?
Спасибо за помощь.