Приложение вылетает при нажатии кнопки для загрузки веб-просмотра - PullRequest
0 голосов
/ 04 июня 2018

Я очень плохо знаком с программированием на 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());

 }

}

ПРИЛОЖЕНИЕ (ДЕЯТЕЛЬНОСТЬ) 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>

Манифест 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 голосов
/ 04 июня 2018

Вы должны просмотреть веб-страницу в activity_main.xml

Проверьте это:

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

 }

}

`

Вот результат

0 голосов
/ 04 июня 2018

Просто чтобы прояснить ответ каждого.

Findviewbyid может найти только те представления, которые являются его детьми.

Когда вызвано действием, используется rootview вашего xml.

Это ваше приложение аварийно завершает работу, поскольку findviewbyid возвращает значение NULL, поэтому любые методы, вызываемые в вашем веб-представлении, вызывают сбой приложения

0 голосов
/ 04 июня 2018

Проверьте здесь

     @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);, и в activity_main.xml нет никаких webview, поэтому он показывает вам 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));
         }

        }

И свою деятельность, в которой вы хотите использовать свой веб-просмотр

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

Надеюсь, ваша проблема решена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...