当前位置: 首页 > 知识库问答 >
问题:

WebView空引用

管玉堂
2023-03-14

E/AndroidRuntime:致命异常:IntentService[NotificationActionService]进程:tk.ypod.ypod,pid:24013 java.lang.NullPointerException:试图对空对象引用调用虚拟方法“Android.view.view Android.view.view.FindViewById(int)”

我试图修复这个错误几个小时,但没有成功,所以现在我请求您的帮助。

我的代码

package tk.ypod.ypod;

import android.app.IntentService;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class NotificationActionService extends IntentService {
static final String LOG_TAG = MainActivity.class.getSimpleName();
private MediaPlayer mp;
private WebView webview;

public NotificationActionService() {
    super( "NotificationActionService" );
}

@Override
protected void onHandleIntent(Intent intent) {
    webview = webview.findViewById(R.id.activity_notification_webview);
    webview.setWebChromeClient( new WebChromeClient() );
    webview.setWebViewClient(new WebClient() {
    });

    String action = intent.getAction();
    Log.e( LOG_TAG, "Received notification action: " + action );
    if ("Previous".equals( action )) {
        webview.loadUrl( "javascript: previous();" );
    } else if ("Next".equals( action )) {
        webview.loadUrl( "javascript: next();" );
    } else if ("Stop".equals( action )) {
        if (mp.isPlaying()) {
            webview.loadUrl( "javascript: stopVideo();" );
            mp.stop();
        }
    } else if ("Play".equals( action )) {
        if (mp.isPlaying()) {
            webview.loadUrl( "javascript: playVideo();" );
            mp.start();
        }
    }
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tk.ypod.ypod" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
    android:allowBackup="true"
    android:label="yPOD"
    android:hardwareAccelerated="true"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

    <activity
        android:name="tk.ypod.ypod.MainActivity"
        android:label="yPOD" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".NotificationActionService" />
</application>
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.putExtra("Next",true);
PendingIntent nextIntent = PendingIntent.getActivity(MainActivity.this, 1, intent, 0);

正在签入onCreate()

boolean nextFlag = getIntent().getBooleanExtra("Next",false);
if(nextFlag) {
    webview.evaluateJavascript( "javascript:next()",
        new ValueCallback <String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.e( LOG_TAG, "Next workded " + value );
            }
        }
    );
}

共有1个答案

岳均
2023-03-14

我不确定你想要达到什么目的,但我确信你的方法需要改进

首先,空指针是因为您还没有初始化WebView,并且调用了以下命令:WebView=WebView.findviewbyid(r.id.activity_notification_webview)

其次,您正在从IntentService执行UI操作(在本例中使用WebView),这将无法工作,因为IntentService在工作线程中运行。

 类似资料:
  • 我试图在JavaFX WebView组件中显示一个网站,但它只呈现一个空白页面。我已按如下方式设置了所有内容: 主控制器。Java语言 MainViewController.java Main.fxml 和 正如你们所见,我还用系统设置了一些代理设置。setProperty()。我也在没有特定代理设置的情况下尝试了它-我认为这不是问题所在。 我不知道我做错了什么。如果我启动应用程序,我可以看到We

  • webview标记用于在您的Electron应用中嵌入“来宾”内容,例如网页。 此内容包含在webview容器中。 应用内的嵌入式页面控制着如何显示此内容。 webview在与您的应用程序不同的进程中运行。 为确保恶意内容的安全性,webview与您的网页没有相同的权限。 这可以确保您的应用免受嵌入内容的侵害。 您的应用与嵌入页面之间的所有互动都将是异步的。 让我们考虑一个示例来了解在我们的Ele

  • 我有一个ionic应用程序,它将json数据发送到使用laravel作为后端的api。 当发送请求到我的路由时,我在控制器上调用一个方法... 然后,该控制器获取数据并将其输入数据库,但有时并非所有从ionic应用程序发送的数据都在数据库中。 也就是说,我的laravel应用程序正在等待名字,姓氏,公司,有时我的离子应用程序只会发送first_name,last_name意味着公司的索引丢失。 如

  • E/AndroidRuntime:致命异常:main process:com.icche.appedity,PID:5318 java.lang.nullpointerException:试图在org.chroum.android_webview.defaultVideoposter(webviewContentSclientAdapter.getDefaultVideoposter(webvie

  • Extends Widget A widget that can display a web page. Since this widget requires a lot of resources it’s recommended to have no more than one instance at a time. Import this type with “const {WebView}

  • 组件 触发字符 mui.open(打开新页面) mopen mui.currentWebview (当前页面) mcurrent mui.back()(关闭窗口) mback mui.backFunction()(重写返回逻辑) mbackfunction mui.backDouble()(双击退出应用) mbackDouble mui.backTast(双击进入后台) mbacktast mui