为什么我无法在 ListView 中显示 Firebase 数据

泽尚·艾哈迈德

有人可以帮助我解决这个问题吗,我尝试在 Listview 中显示来自 Firebase 的作业,但它没有显示任何内容!我在堆栈和不同站点尝试了不同主题的代码,但在

adapter=new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,retrieve());

和这个

lv.setAdapter(adapter);

有空异常

Java代码

package com.gumption.zeeshanahmed.jobaps;

import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast; 
import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import java.util.ArrayList;

 public class EditsJobs extends AppCompatActivity {

     ListView lv;
     ArrayAdapter<String> adapter;
     ArrayList<String> spacecrafts=new ArrayList<>();

// Declaring String variable ( In which we are storing firebase server URL 
//).
     public static final String Firebase_Server_URL = 
     "https://jobaps70.firebaseio.com/";

// Declaring String variables to store name & phone number get from 
//EditText.
      String PriceHolder, JobDescriptionHolder;
      FirebaseHelper helper;

// Declaring Firebase object.
      Firebase firebase;

// Creating FirebaseAuth.
      FirebaseAuth firebaseAuth ;

// Creating FirebaseAuth.
      FirebaseUser firebaseUser;

// Creating Boolean variable that holds EditText is empty or not status.
      Boolean EditTextStatus ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edits_jobs);

//Actionbar
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.logo);
    getSupportActionBar().setBackgroundDrawable(new 
    ColorDrawable(getResources().getColor(R.color.Snow)));

// Adding MainActivity context into Firebase context.

    Firebase.setAndroidContext(EditsJobs.this);

// Passing firebase Server URL into firebase object.

    firebase = new Firebase(Firebase_Server_URL);
    firebaseAuth = FirebaseAuth.getInstance();

// On activity start check whether there is user previously logged in or 
//   not.

    if(firebaseAuth.getCurrentUser() == null){

        // Finishing current Profile activity.
        finish();

        // If user already not log in then Redirect to LoginActivity .
        Intent intent = new Intent(EditsJobs.this, LoginActivity.class);
        startActivity(intent);

        // Showing toast message.
        Toast.makeText(EditsJobs.this, "Please Log in to continue", 
        Toast.LENGTH_LONG).show();

    }

    // Adding firebaseAuth current user info into firebaseUser object.
    firebaseUser = firebaseAuth.getCurrentUser();

    // Getting logged in user email from firebaseUser.getEmail() method and 
     set into TextView.
    setTitle( firebaseUser.getEmail());
    setTitleColor(R.color.DarkGray);

    // ListView element

    lv = (ListView) findViewById(R.id.datadisplist);
    adapter=new ArrayAdapter<String>
    (this,android.R.layout.simple_list_item_1,retrieve());
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
        position, long id) {
            Toast.makeText(EditsJobs.this, retrieve().get(position), 
            Toast.LENGTH_SHORT).show();
         }
    });


}

 private void fetchData(DataSnapshot dataSnapshot)
{
    jobsdetails.clear();
    for (DataSnapshot ds : dataSnapshot.getChildren())
    {
        String jobs=ds.getValue(JobDetails.class).getjob();
        jobsdetails.add(jobs);
    }
}

//RETRIEVE
public ArrayList<String> retrieve(){
firebase.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        fetchData(dataSnapshot);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        fetchData(dataSnapshot);

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }

});


return spacecrafts;
}
}

XML

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout 
   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="com.gumption.zeeshanahmed.jobaps.EditsJobs">
   <TextView
    android:id="@+id/texteditjobs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/text_edit_jobs"
    android:textSize="40sp"
    android:textAlignment="center"/>

    <ListView
        android:id="@+id/datadisplist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/texteditjobs"
        android:background="@color/Khaki"/>
       </RelativeLayout>

职位详情

 public class JobDetails {

    private String price;
    private String jobDescription;
    private String jobSpinner;
    public String email;
    public JobDetails() {
        // This is default constructor.
    }

    public String getPrice() {

        return price;
    }

    public void setPrice(String pri) {

        this.price = pri;
    }

    public String getjobDescription() {

        return jobDescription;

    }

    public void setjobDescription(String jobd) {

        this.jobDescription = jobd;
    }

    public void setjob(String jry) {

        this.jobSpinner = jry ;

    }

    public String getjob() {

        return jobSpinner;

    }

    public void setemail(String jel) {

        this.email = jel ;

    }

    public String getemail() {

        return email;

    }
}

使用文本视图

当我使用文本视图时,数据最多只显示一个!

// Adding click listener to Show data button.
    ShowButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // Adding addValueEventListener method on firebase object.
            firebase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot MainSnapshot) {

              for (DataSnapshot SubSnapshot : MainSnapshot.getChildren()) {

              JobDetails jobdetails =SubSnapshot.getValue(JobDetails.class);
                    for
                        // Adding name and phone number of student into 
                      string that is coming from server.

                        String ShowDataString = "Job: " + 
                        jobdetails.getjob() + "\nJob Description: " + 
                        jobdetails.getjobDescription() + "\n\n";

                        // Apply complete string variable into TextView.
                        ShowDataTextView.setText(ShowDataString);
               }
                    }
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {
                    System.out.println("Data Access Failed" + 
                firebaseError.getMessage());
                }
            });
        }
        });

使用 XML

   <TextView
    android:id="@+id/showmetadata"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/show"
    android:textSize="40sp"
    android:textAlignment="center"/>

如果有人帮助我,这将非常有帮助。谢谢,麻烦您了!

**尝试列表视图**

现在我尝试了 listview,它崩溃了,这是代码和错误

 public class WorkActivity extends AppCompatActivity {

//    Spinner jobSpin;

ListView lv;
Button ShowButton;
// Define a String ArrayList for the job
private ArrayList<String> jobdes=new ArrayList<>();

// Define an ArrayAdapter for the list
private ArrayAdapter<String> arrayAdapter;

// Declaring String variable ( In which we are storing firebase server URL 
).
public static final String Firebase_Server_URL = 
"https://jobaps70.firebaseio.com/";
public static final String Firebase_Server_URL1 = 
 "https://jobaps70.firebaseio.com/jobs";

// Declaring String variables to store name & phone number get from 
EditText.
String PriceHolder, JobDescriptionHolder;
FirebaseHelper helper;

// Declaring Firebase object.
Firebase firebase,firebase1;

// Creating FirebaseAuth.
FirebaseAuth firebaseAuth ;

// Creating FirebaseAuth.
FirebaseUser firebaseUser;

// Creating Boolean variable that holds EditText is empty or not status.
Boolean EditTextStatus ;


TextView ShowDataTextView ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edits_jobs);

      //        Actionbar
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.logo);
    getSupportActionBar().setBackgroundDrawable(new 
    ColorDrawable(getResources().getColor(R.color.Snow)));

    ShowButton = (Button)findViewById(R.id.show);

    // Adding MainActivity context into Firebase context.
    Firebase.setAndroidContext(WorkActivity.this);

    // Passing firebase Server URL into firebase object.
    firebase = new Firebase(Firebase_Server_URL);
    firebase1=new Firebase(Firebase_Server_URL1);

    firebaseAuth = FirebaseAuth.getInstance();

    // On activity start check whether there is user previously logged in or 
       not.
    if(firebaseAuth.getCurrentUser() == null){

        // Finishing current Profile activity.
        finish();

        // If user already not log in then Redirect to LoginActivity .
        Intent intent = new Intent(WorkActivity.this, LoginActivity.class);
        startActivity(intent);

        // Showing toast message.
        Toast.makeText(WorkActivity.this, "Please Log in to continue", 
        Toast.LENGTH_LONG).show();

    }

    // Adding firebaseAuth current user info into firebaseUser object.
    firebaseUser = firebaseAuth.getCurrentUser();

    // Getting logged in user email from firebaseUser.getEmail() method and 
        set into TextView.
    setTitle( firebaseUser.getEmail());
    setTitleColor(R.color.DarkGray);
      firebase.child("jobs");

    // Associate the jobs' list with the corresponding ListView
    lv = (ListView) findViewById(R.id.lvshow);

    // Set the ArrayAdapter to the ListView
    arrayAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, jobdes);
    lv.setAdapter(arrayAdapter);

    // Attach a ChildEventListener to the teacher database, so we can 
          retrieve the job entries
    firebase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            // Get the value from the DataSnapshot and add it to the jobs' 
         list
            JobDetails jo = (JobDetails) 
         dataSnapshot.getValue(JobDetails.class);
            String joString = String.valueOf(jo);
            arrayAdapter.add(joString);
 //

            // Notify the ArrayAdapter that there was a change
            arrayAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError databaseError) {

        }
    });
}

}

错误

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.gumption.zeeshanahmed.jobaps, PID: 4774
              java.lang.RuntimeException: Unable to start activity 
              ComponentInfo{com.gumption.zeeshanahmed.jobaps/
              com.gumption.zeeshanahmed.jobaps.WorkActivity}: 
              java.lang.NullPointerException: Attempt to invoke virtual 
              method 'void 
             android.widget.ListView.setAdapter(android.widget.ListAdapter)' 
             on a null object reference at 
  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                  at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)at 
 android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method) at 
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
 (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main 
 (ZygoteInit.java:616) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 
 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a 
 null object reference at 
 com.gumption.zeeshanahmed.jobaps.WorkActivity.onCreate
 (WorkActivity.java:109)
              at android.app.Activity.performCreate(Activity.java:6237) at 
 android.app.Instrumentation.callActivityOnCreate
 (Instrumentation.java:1107) at 
 android.app.ActivityThread.performLaunchActivity
 (ActivityThread.java:2369)atandroid.app.ActivityThread.handleLaunchActivity
 (ActivityThread.java:2476) at android.app.ActivityThread.-
  wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage
 (ActivityThread.java:1344) at android.os.Handler.dispatchMessage
 (Handler.java:102) at android.os.Looper.loop(Looper.java:148) at 
 android.app.ActivityThread.main(ActivityThread.java:5417) at 
 java.lang.reflect.Method.invoke(Native Method) at 
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
 (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main
 (ZygoteInit.java:616) 

java错误行

它在此显示错误

 lv.setAdapter(arrayAdapter);
亚历克斯·马莫

您的代码中的问题是retrieve(),这是一种返回ArrayList<String>命名的spacecrafts. ArrayList<String>是在代码的第一行初始化的,但从未更新。换句话说,您正在使用spacecrafts空的适配器。

为了解决这个问题,每次从 Firebase 获取数据时,将其添加到右侧ArrayList<String>. 节点的另一件事,由于这些方法的异步行为,您不能ArrayList<String>以您的方式返回 an ,因为它始终为空。您需要在该方法中声明和使用/更新该 ArrayList。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将数据显示为Firebase中的ListView

来自分类Dev

无法从Firebase将数据显示为ListView

来自分类Dev

为什么Firebase数据无法在我的Ember CLI生成的输出中正确显示?

来自分类Dev

为什么我的ListView不显示新数据?

来自分类Dev

检索 Firebase 数据并在 Android Studio 的 ListView 中显示

来自分类Dev

为什么Firebase中的数据无法在我的FlatList(React Native)中呈现?

来自分类Dev

当我可以在Firebase中看到费用数据时,为什么我的应用程序中未显示费用数据?

来自分类Dev

为什么我不能将 Firebase 实时数据库中的数据显示到 UITableView 中?

来自分类Dev

从Firebase读取数据,并在listview中填充

来自分类Dev

如何使用Firebase中的数据填充ListView?

来自分类Dev

如何使用Firebase中的数据填充ListView?

来自分类Dev

Android firebase 在listview 错误中检索数据

来自分类Dev

如何删除 ListView 和 Firebase 中的数据?

来自分类Dev

我的 ListView 数据不显示

来自分类Dev

无法加载JSON数据以显示在ListView中

来自分类Dev

我想在Yii2 listview中显示列数据

来自分类Dev

在ListView中显示json数据?

来自分类Dev

数据不显示在 ListView 中

来自分类Dev

无法在TableViewController中显示Firebase数据库中的项目

来自分类Dev

为什么我的代码不显示在线数据库的结果?如何使ListView中的项目可点击到显示结果的新页面?

来自分类Dev

无法显示连接到我的Angular应用的Firebase数据库中的时间格式数据

来自分类Dev

在ListView中显示数据库数据

来自分类Dev

为什么我的数据两次存储在Firebase数据库中?

来自分类Dev

Firebase 数据库:为什么我查询的数据快照中的键/引用引用其父级?

来自分类Dev

为什么我的 addListenerForSingleValueEvent 停止从 android 应用程序中的 Firebase 数据库读取数据?

来自分类Dev

为什么我的Listview没有显示?

来自分类Dev

为什么我无法在适配器中接收数据

来自分类Dev

为什么我的程序无法从文件中读取数据

来自分类Dev

为什么我无法在引导表中填充json数据

Related 相关文章

  1. 1

    无法将数据显示为Firebase中的ListView

  2. 2

    无法从Firebase将数据显示为ListView

  3. 3

    为什么Firebase数据无法在我的Ember CLI生成的输出中正确显示?

  4. 4

    为什么我的ListView不显示新数据?

  5. 5

    检索 Firebase 数据并在 Android Studio 的 ListView 中显示

  6. 6

    为什么Firebase中的数据无法在我的FlatList(React Native)中呈现?

  7. 7

    当我可以在Firebase中看到费用数据时,为什么我的应用程序中未显示费用数据?

  8. 8

    为什么我不能将 Firebase 实时数据库中的数据显示到 UITableView 中?

  9. 9

    从Firebase读取数据,并在listview中填充

  10. 10

    如何使用Firebase中的数据填充ListView?

  11. 11

    如何使用Firebase中的数据填充ListView?

  12. 12

    Android firebase 在listview 错误中检索数据

  13. 13

    如何删除 ListView 和 Firebase 中的数据?

  14. 14

    我的 ListView 数据不显示

  15. 15

    无法加载JSON数据以显示在ListView中

  16. 16

    我想在Yii2 listview中显示列数据

  17. 17

    在ListView中显示json数据?

  18. 18

    数据不显示在 ListView 中

  19. 19

    无法在TableViewController中显示Firebase数据库中的项目

  20. 20

    为什么我的代码不显示在线数据库的结果?如何使ListView中的项目可点击到显示结果的新页面?

  21. 21

    无法显示连接到我的Angular应用的Firebase数据库中的时间格式数据

  22. 22

    在ListView中显示数据库数据

  23. 23

    为什么我的数据两次存储在Firebase数据库中?

  24. 24

    Firebase 数据库:为什么我查询的数据快照中的键/引用引用其父级?

  25. 25

    为什么我的 addListenerForSingleValueEvent 停止从 android 应用程序中的 Firebase 数据库读取数据?

  26. 26

    为什么我的Listview没有显示?

  27. 27

    为什么我无法在适配器中接收数据

  28. 28

    为什么我的程序无法从文件中读取数据

  29. 29

    为什么我无法在引导表中填充json数据

热门标签

归档