#android #firebase #android-recyclerview
# #Android #firebase #android-recyclerview
Вопрос:
Я создаю простое приложение для тура с firebase, которое почти завершено, но теперь я добавил progressbar и emptystate, которые не отображаются. Мое приложение выходит из строя, когда нет подключения к Интернету, я использовал индикатор выполнения if и else, а пустое состояние не отображается
Ознакомьтесь с моим кодом и скриншотами, которые помогут мне решить эту проблему
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Toolbar toolbar;
RecyclerView mRecyclerView;
FirebaseAdapter mAdapter;
FirebaseRecyclerOptions<DataClass> options;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference(" Center");
private TextView mEmptyStateTextView;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// View loadingIndicator = findViewById(R.id.progressBar);
mProgressBar = (ProgressBar)findViewById(R.id.progressBar);
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if( activeNetwork != null amp;amp;
activeNetwork.isConnectedOrConnecting()) {
mProgressBar.setVisibility(View.GONE);
toolbar = findViewById(R.id.toolBar);
this.setSupportActionBar(toolbar);
this.getSupportActionBar().setTitle("");
options = new FirebaseRecyclerOptions.Builder<DataClass>()
.setQuery(myRef, DataClass.class)
.build();
}
else {
mProgressBar.setVisibility(View.GONE);
mEmptyStateTextView = (TextView) findViewById(R.id.emptyState);
mEmptyStateTextView.setText(R.string.no_internet_connection);
}
mRecyclerView = (RecyclerView) findViewById(R.id.recylerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseAdapter(options, MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
}
In Xml:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/recyclerview_bg"
android:padding="10dp"
android:layout_below="@id/tool">
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/recylerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="4dp"
android:layout_marginLeft="3dp"
android:layout_marginTop="4dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:id="@ id/emptyState"
android:layout_centerInParent="true" />
<androidx.core.widget.ContentLoadingProgressBar
android:id="@ id/progressBar"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
Error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bgcenter/com.example.bgcenter.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference
at com.example.bgcenter.MainActivity.onCreate(MainActivity.java:61)
Комментарии:
1. Попробуйте изменить объявление переменной на
private ContentLoadingProgressBar mProgressBar
и инициализацию переменной наmProgressBar = (ContentLoadingProgressBar) findViewById(R.id.progressBar);
2. Спасибо, брат, за ответ