我是Android编程的新手,我正在尝试开发一个基本上有四个按钮的小应用程序。其中一个按钮是在点击时将用户带到网站(在Android应用程序中)的登录页面。
我不知道我做错了什么,但是当点击按钮(登录)时,应用程序崩溃了。以下是我的代码
主要活动XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/back"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_margin="0dp"
android:alpha="0.6"
android:background="@drawable/my_button_bg"
android:drawableLeft="@drawable/ic_lock_open_black_24dp"
android:drawablePadding="5dp"
android:onClick="login"
android:padding="15dp"
android:paddingLeft="50dp"
android:paddingRight="20dp"
android:text="@string/text_login"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textColor="@color/colorOrange"
android:textSize="20sp"
android:textStyle="bold"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_gravity="start"
android:textStyle="bold"
android:textAllCaps="false"
android:padding="15dp"
android:textSize="20sp"
android:textAlignment="textStart"
android:text="@string/text_howto"
android:id="@+id/howto"
android:alpha="0.6"
android:drawablePadding="5dp"
android:paddingLeft="50dp"
android:paddingRight="20dp"
android:background="@drawable/my_button_bg"
android:textColor="@color/colorOrange"
android:drawableLeft="@drawable/ic_live_help_black_24dp"
/>
主要活动JAVA
package com.example.hp.fruitprint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View v) {
webView = (WebView)findViewById(R.id.home);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("https://mysitename.com/login");
webView.setWebViewClient(new WebViewClient());
}
}
APP(ACTIVITY)XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<WebView
android:id="@+id/home"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"/>
</LinearLayout>
MANIFEST XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hp.fruitprint">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我知道我做的不对,但我对Android编程非常陌生(三天前开始)。如果您发现任何内容,我也不会在代码中做得正确。
答案 0 :(得分:1)
点击这里
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View v) {
webView = (WebView)findViewById(R.id.home);
}
}
您正在setContentView(R.layout.activity_main);
找到视图,webview
中没有任何activity_main.xml
,因此它会显示Null Pointer exception
。它无法从不同的布局中找到视图。在activity_main.xml
如果您想要各自的活动,请尝试
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View v) {
startActivity(new Intent(MainActivity.this, YourWebViewActivity.class));
}
}
您想要使用webView的活动
public class YourWebViewActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_webview_layout);
webView = (WebView)findViewById(R.id.home);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("https://www.google.com");
webView.setWebViewClient(new WebViewClient());
}
并为webView创建一个新活动
希望您的问题得到解决
答案 1 :(得分:0)
您必须在activity_main.xml中使用webview
检查一下:
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_margin="0dp"
android:alpha="0.6"
android:drawablePadding="5dp"
android:onClick="login"
android:padding="15dp"
android:paddingLeft="50dp"
android:paddingRight="20dp"
android:textAlignment="textStart"
android:textAllCaps="false"
android:textSize="20sp"
android:textStyle="bold"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_gravity="start"
android:textStyle="bold"
android:textAllCaps="false"
android:padding="15dp"
android:textSize="20sp"
android:textAlignment="textStart"
android:text="Hello"
android:id="@+id/howto"
android:alpha="0.6"
android:drawablePadding="5dp"
android:paddingLeft="50dp"
android:paddingRight="20dp"
/>
<WebView
android:id="@+id/home"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"/>
</LinearLayout>
MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
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.home);
}
public void login(View v) {
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("https://www.google.com");
webView.setWebViewClient(new WebViewClient());
}
}
`
答案 2 :(得分:0)
只是为了澄清每个人的答案。
Findviewbyid只能找到属于自己的孩子的视图。
当活动调用时,将使用xml的rootview。
这是你的应用程序崩溃,因为findviewbyid返回null因此你的webview上调用的任何方法都会导致应用程序崩溃