java - 设置 onClickListener 时出现 NullPointerException

标签 java android xml

我正在尝试制作自己的浏览器,但我陷入困境。我尝试使用主 Activity 的 Intent 将字符串作为数据类型的 URL 发送到 Web Activity 。这是我的网络 Activity java 代码:

public class webView extends MainActivity {

private WebView halamanWeb;
private ProgressBar progressBar;
private EditText searchBox;
private ImageButton tombolCari2;
private String Url;

private String getUrl(){
    return Url = "https://" + searchBox.getText().toString();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.surfing_layout);

    searchBox = (EditText) findViewById(R.id.searchBoxAtas);
    tombolCari2 = (ImageButton) findViewById(R.id.tombolCari);
    progressBar = (ProgressBar) findViewById(R.id.bar);
    halamanWeb = (WebView) findViewById(R.id.webLayout);

    Intent test = getIntent();
    final String url = "https://" + test.getStringExtra("key");

    halamanWeb.getSettings().setJavaScriptEnabled(true);
    halamanWeb.getSettings().setDisplayZoomControls(true);
    halamanWeb.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            progressBar.setVisibility(View.VISIBLE);
            progressBar.setProgress(newProgress);
             if (newProgress == 100) {
               progressBar.setVisibility(View.GONE);
            }
            halamanWeb.loadUrl(url);
            halamanWeb.setWebViewClient(new MyWebLaunch());
        }

    });

    tombolCari2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            halamanWeb.getSettings().setJavaScriptEnabled(true); 
            halamanWeb.getSettings().setDisplayZoomControls(true);
            halamanWeb.setWebChromeClient(new WebChromeClient(){
                @Override
                public void onProgressChanged(WebView view, int newProgress){
                    progressBar.setVisibility(View.VISIBLE);
                    progressBar.setProgress(newProgress);
                    if(newProgress == 100){
                        progressBar.setVisibility(View.GONE);
                    }
                }

            });
            halamanWeb.loadUrl(getUrl());
            halamanWeb.setWebViewClient(new MyWebLaunch());
        }
    });

}
private class MyWebLaunch extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return super.shouldOverrideUrlLoading(view, url);
    }
}
}

这是我的主要 Activity java代码:

public class MainActivity extends AppCompatActivity {

//deklarasi
private EditText searchBox;
private ImageButton tombolCari;
private WebView halamanWeb;
private ProgressBar progressBar;
private String Url;

//deklarasi fungsi
private String getUrl(){
    return Url = "https://" + searchBox.getText().toString();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    searchBox = (EditText) findViewById(R.id.searchBoxAtas);
    tombolCari = (ImageButton) findViewById(R.id.tombolCari);
    progressBar = (ProgressBar) findViewById(R.id.bar);

    tombolCari.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Url = getUrl();
            Intent test = new Intent(v.getContext(), webView.class);
            test.putExtra("key", Url);
            startActivity(test);
        }
    });

}
}

当我运行该代码时,收到错误代码:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

任何人都可以帮助我实现 Intent 想法,我想将一个字符串 URL 从我的主要 Activity 传递到 Web Activity ,然后使用它来使用该 URL 打开网站。 如何摆脱图像按钮上的空指针? 我需要一些帮助!谢谢!

编辑:这是我启动代码时的日志,它会运行,但是当我输入某些内容并按下 ImageButton 时,它崩溃了。

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.johno.myapplication.webView.onCreate(webView.java:54)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6669) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

最佳答案

检查 surfing_layout.xml 中是否有如下所示的内容:

    <ImageButton
        android:id="@+id/tombolCari"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

如果存在,只需检查该图像按钮的 ID 是否为 tombolCari。如果是其他的,只需将其更改为 android:id="@+id/tombolCari"

关于java - 设置 onClickListener 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803882/

相关文章:

java - 如何让Swagger使用@ApplicationPath?

java - 根据android版本从两个版本的库中加载类

xml - 如何通过 VBA 读取和修改 XML 文件?

android - 如何解决 "ERROR: libx264 not found"?

c# - 使用 C# 在 HttpPost 中接收 XML

xml - 将CSV文件转换为适当的XML格式

java - 正则表达式删除 2 个字符串之间的所有内容

java - 在 Spring Boot 的 application.properties 中使用 env 变量

java - 泛型 - 动态创建数据

java - 如何停止 LinearLayout 内 ProgressBar 的可见性