Android ProgressBar蜂巢NullPointerException android.widget.ProgressBar.setVisibility(int)NullPointerException

时间:2018-11-04 12:42:28

标签: android android-studio

在我的应用程序中,我试图在URL加载到webView上时显示一个spinner / progressBar,但我收到“ 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,看看代码,一切看起来应该是怎样的。

我觉得我要在这里学习新东西,因为我清理了项目,尝试了一下,并且无论如何都会出错。.所以我不确定我要缺少什么。

1 个答案:

答案 0 :(得分:0)

首先,您必须增加活动的布局:

setContentView(R.layout.activity_main);

,然后找到进度条:

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

否则,将找不到进度条,并且progressnull

因此onCreate()中的前2行必须为:

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

之后:

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