Android ProgressBar hiving NullPointerException android.widget.ProgressBar.setVisibility (int) NullPointerException

В моем приложении я пытаюсь показать spinner / progressBar, пока URL-адрес загружается в webView, но я получаю исключение «java.lang.NullPointerException: Как решить эту проблему, пожалуйста, обратитесь к приведенному ниже коду.

Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference" here id the complete error log.
    11-04 17:47:49.952 14105-14105/com.srimanjavagroup.sjg E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.srimanjavagroup.sjg, PID: 14105
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference

MainActivity.java

package com.srimanjavagroup.sjg;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

private WebView webView;
private ProgressBar progress;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    progress = (ProgressBar) findViewById(R.id.progressBar);
    //progress.setVisibility(View.GONE);
    final String ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36";

        setContentView(R.layout.activity_main);
        webView = (WebView)findViewById(R.id.webView);
        //webView.setWebViewClient(new myWebclient());
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setGeolocationEnabled(true);
        webSettings.setUserAgentString(ua);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    if (isNetworkAvailable()) {
        webView.loadUrl("http://www.srimanjavagroup.com");
        webView.setWebViewClient(new WebViewClient(){
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

                webView.loadUrl("file:///android_asset/error.html");
                Toast.makeText(getApplicationContext(), "Internet is not available", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                progress.setVisibility(View.GONE);
                super.onPageFinished(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                progress.setVisibility(View.VISIBLE);
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
    } else{
        webView.loadUrl("file:///android_asset/error.html");
        Toast.makeText(getApplicationContext(), "Internet is not available", Toast.LENGTH_SHORT).show();
    }
}


@Override
protected void onNewIntent(Intent intent) {`enter code here`
    super.onNewIntent(intent);
    Log.d("","Notification pass");
    Toast.makeText(getApplicationContext(), "notification test", Toast.LENGTH_LONG).show();
}

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

main_activity.xml

    <?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context = ".MainActivity">

    <ProgressBar
        android:id = "@+id/progressBar"
        style = "?android:attr/progressBarStyle"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        tools:layout_width = "wrap_content" />


    <WebView
        android:id = "@+id/webView"
        android:layout_width = "0dp"
        android:layout_height = "0dp"
        android:layout_alignParentStart = "true"
        android:layout_alignParentLeft = "true"
        android:layout_alignParentTop = "true"
        android:layout_alignParentEnd = "true"
        android:layout_alignParentRight = "true"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent">


    </WebView>



    </android.support.constraint.ConstraintLayout>

Не могу понять, почему получаю исключение NullPointerException, просматриваю код, все вроде как должно быть.

Я чувствую, что собираюсь узнать здесь что-то новое, потому что я очистил проект, опробовал его, и, несмотря на это, ошибка продолжает возникать ... так что я не уверен, что мне не хватает.

0
0
2 607
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала вы должны раздуть макет своей деятельности:

setContentView(R.layout.activity_main);

а затем найдите индикатор выполнения:

progress = (ProgressBar) findViewById(R.id.progressBar);

в противном случае индикатор выполнения не будет обнаружен, и progress будет null.

Итак, первые 2 строки в onCreate() должны быть:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

и после этого:

progress = (ProgressBar) findViewById(R.id.progressBar);

Можете ли вы сказать мне, как вывести индикатор выполнения поверх webView?

Electronics World 04.11.2018 14:07

См. Этот ответ stackoverflow.com/questions/44351354/…

forpas 04.11.2018 14:10

Другие вопросы по теме