-6

I am very new to Android programming and I am trying to develop a small app that basically has four buttons. One of the buttons is suppose to take the user to a login page on a website (in the android app) when clicked.

I don't know what I am doing wrong but when ever the button (login) is clicked, the app crashes. Below are my codes

MAIN 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: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"

    />

MAIN ACTIVITY 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>

I know I am not doing something right but I am very very new to Android programming (started three days ago). Please also if you find anything at all I am not doing proper in the codes.

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Kramo Man
  • 1
  • 1

3 Answers3

1

Check here

     @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);
    }
}

You Are finding view from setContentView(R.layout.activity_main); and there is no any webview in activity_main.xml so it shows you Null Pointer exception. it can not find view from different layout. use your webview in activity_main.xml

If you want different Activities for each then try it

 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));
         }

        }

And your activity which has you want to use your 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());
 }

and create a new activity for webView

Hope your issue resolved

Sandeep Parish
  • 1,888
  • 2
  • 9
  • 20
0

you have to take webview in activity_main.xml

Check this:

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

0

Just to clarify everyone's answer.

Findviewbyid can only find views that are children of itself.

When called by the activity the rootview of your xml is used.

This your app is crashing because findviewbyid is returning null thus any methods called on your webview are causing the app to crash

Joel Libby
  • 106
  • 8