单击按钮加载webview时,应用程序崩溃

时间:2018-06-04 10:31:40

标签: android webview

我是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编程非常陌生(三天前开始)。如果您发现任何内容,我也不会在代码中做得正确。

3 个答案:

答案 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());

 }

}

`

Here is the result

答案 2 :(得分:0)

只是为了澄清每个人的答案。

Findviewbyid只能找到属于自己的孩子的视图。

当活动调用时,将使用xml的rootview。

这是你的应用程序崩溃,因为findviewbyid返回null因此你的webview上调用的任何方法都会导致应用程序崩溃