[英]NullPointerException when setting OnClickListener in method
[英]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.