繁体   English   中英

设置onClickListener时发生NullPointerException

[英]NullPointerException when setting an onClickListener

我正在尝试制作自己的浏览器,但被卡住了。 我尝试使用意图将字符串作为数据类型的URL从我的主要活动发送到Web活动。 这是我的网络活动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);
    }
}
}

这是我的主要活动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

任何人都可以用这个想法帮助我,我想将字符串URL从我的主要活动传递到Web活动,然后使用它通过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是否有以下surfing_layout.xml

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

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

您正在使用WebView活动覆盖MainActivity视图,并且期望MainActivity视图应该处于活动状态.R.layout.activity_main中存在的所有Mainactivity UI元素都将超出范围。要将此活动从activity_main内容修复为surfing_layout。

  Remove setContentView(R.layout.activity_main) and  from MainActivity and make surev 
   surfing_layout has tombolCari imageButton.

现在,您有两个xml,一个用于MainActivity =>“ activity_main”,另一个用于webView =>“ surfing_layout”。

我看到您在webView类中扩展了MainActivity并添加了相同的小部件,然后在webView类中再次编写了它,那么如果您忘记将ImageButton从activity_main.xml添加到surfing_layout.xml中,或者忘记为ImageButton添加相同的ID到surfing_layout。 XML文件

将此代码添加到surfing_layout.xml

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

暂无
暂无

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

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