Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Firebase';获取数据更新GridView时出现问题;s数据库_Java_Android_Android Arrayadapter_Android Gridview - Fatal编程技术网

Java 从Firebase';获取数据更新GridView时出现问题;s数据库

Java 从Firebase';获取数据更新GridView时出现问题;s数据库,java,android,android-arrayadapter,android-gridview,Java,Android,Android Arrayadapter,Android Gridview,我刚开始学习android studio大约一个月。很抱歉,如果我以错误的格式发布了这篇文章,或者问了错误的问题。我的概览页面上有一个GridView,它有一个扩展ArrayAdapter的自定义适配器。我有一个GridItem类,它包含我希望在每个网格中显示的对象。我想做的是更新我的GridView,以便在每次数据库中创建新的子项时都有一个新的网格 这是我的GridItem类 package com.example.android.testlogin; import java.io.Seri

我刚开始学习android studio大约一个月。很抱歉,如果我以错误的格式发布了这篇文章,或者问了错误的问题。我的概览页面上有一个GridView,它有一个扩展ArrayAdapter的自定义适配器。我有一个GridItem类,它包含我希望在每个网格中显示的对象。我想做的是更新我的GridView,以便在每次数据库中创建新的子项时都有一个新的网格

这是我的GridItem类

package com.example.android.testlogin;

import java.io.Serializable;


public class GridItem implements Serializable {

int mImageView;
String mTitleHere;
String mPriceHere;

public GridItem(int ImageView, String titleHere, String priceHere) {
    mImageView = ImageView;
    mTitleHere = titleHere;
    mPriceHere = priceHere;
}

public int getmImageView() {
    return mImageView;
}

public void setmImageView(int ImageView) {
    mImageView = ImageView;
}

public String getmTitleHere() {
    return mTitleHere;
}

public void setmTitleHere(String TitleHere) {
    mTitleHere = TitleHere;
}

public String getmPriceHere() {
    return mPriceHere;
}

public void setmPriceHere(String PriceHere) {
   mPriceHere = PriceHere;
}
}
这是我的自定义适配器

package com.example.android.testlogin;


public class GridAdapter extends ArrayAdapter<GridItem> {

public GridAdapter(Activity context, ArrayList<GridItem> packageName){

    super(context ,0, packageName);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Check if the existing view is being reused, otherwise inflate the view
    View listItemView = convertView;
    if(listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.grid_item, parent, false);
    }


    GridItem currentItem = getItem(position);


    ImageView putPic = (ImageView) listItemView.findViewById(R.id.imageHere);
    TextView putTitle = (TextView) listItemView.findViewById(R.id.titleHere);
    TextView putPrice = (TextView)listItemView.findViewById(R.id.per_price);

    //Set Text for TextView and ImageResources for ImageView.
    putPic.setImageResource(currentItem.getmImageView());
    putTitle.setText(String.valueOf(currentItem.getmTitleHere()));
    putPrice.setText(String.valueOf("$: " + currentItem.getmPriceHere()));


    // Return the whole list item layout (containing 2 TextViews and an ImageView)
    // so that it can be shown in the ListView
    return listItemView;


}


}
package com.example.android.testlogin;
公共类GridAdapter扩展ArrayAdapter{
公共GridAdapter(活动上下文,ArrayList packageName){
super(上下文,0,packageName);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//检查现有视图是否正在重新使用,否则会膨胀视图
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutInflater.from(getContext()).flate(R.layout.grid_项,父项,false);
}
GridItem currentItem=getItem(位置);
ImageView putPic=(ImageView)listItemView.findViewById(R.id.imageHere);
TextView puttle=(TextView)listItemView.findViewById(R.id.titleHere);
TextView putPrice=(TextView)listItemView.findViewById(R.id.per_price);
//设置TextView的文本和ImageView的ImageResources。
setImageResource(currentItem.getmImageView());
puttile.setText(String.valueOf(currentItem.getmTitleHere());
putPrice.setText(String.valueOf(“$:”+currentItem.getmPriceHere());
//返回整个列表项布局(包含两个TextView和一个ImageView)
//以便可以在ListView中显示它
返回listItemView;
}
}
这是我的概览页面,它在用户登录时充当主页面。用户应该能够看到创建的所有网格

package com.example.android.testlogin;



public class OverviewPage extends AppCompatActivity {

private GridView lvPackage;
private GridAdapter adapter;
private FirebaseAuth mAuth1;
private FirebaseAuth.AuthStateListener mAuthListener1;
private DatabaseReference mDatabaseReference;




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


    lvPackage = (GridView) findViewById(R.id.grid);
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("comPostsCopy");





    mAuth1 = FirebaseAuth.getInstance();
    mAuthListener1 = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        if (firebaseAuth.getCurrentUser() == null) {

            startActivity(new Intent(OverviewPage.this , MainActivity.class));
        }

        }
    };



    //Add sample data for grid;


    final ArrayList<GridItem> elements = new ArrayList<GridItem>();

    elements.add(new GridItem(R.mipmap.ic_launcher_round, "Hello there", "120"));
    elements.add(new GridItem(R.mipmap.ic_launcher_round, "Bare Bears", "50"));
    elements.add(new GridItem(R.mipmap.ic_launcher_round, "Not Fun", "50"));


    mDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            //Loop Through Children
            for(DataSnapshot ds : dataSnapshot.getChildren());


            *//Read Data from Firebase Database and get required data to be shown on new grid.*



        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


    //Initialize Adapter

    adapter = new GridAdapter(this, elements );
    lvPackage.setAdapter(adapter);

    lvPackage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Do something
            Toast.makeText(OverviewPage.this, "Not yet", Toast.LENGTH_SHORT).show();
        }
    });

}


@Override
protected void onStart() {
    super.onStart();

    mAuth1.addAuthStateListener(mAuthListener1);
}


}
package com.example.android.testlogin;
公共类概览页扩展了AppCompatActivity{
私有GridView包;
专用网格适配器;
私人消防基地AUTH mAuth1;
私有FirebaseAuth.AuthStateListener mAuthListener1;
私有数据库引用mDatabaseReference;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.overview_页面);
lvPackage=(GridView)findviewbyd(R.id.grid);
mDatabaseReference=FirebaseDatabase.getInstance().getReference().child(“组合透视”);
mAuth1=FirebaseAuth.getInstance();
mAuthListener1=新的FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
如果(firebaseAuth.getCurrentUser()==null){
startActivity(新意图(OverviewPage.this,MainActivity.class));
}
}
};
//为网格添加样本数据;
最终ArrayList元素=新ArrayList();
添加(新的GridItem(R.mipmap.ic_launcher_round,“你好”,“120”);
元素。添加(新GridItem(R.mipmap.ic_launcher_round,“裸熊”,“50”));
添加(新GridItem(R.mipmap.ic_launcher_round,“不好玩”,“50”));
mDatabaseReference.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//环游儿童
for(DataSnapshot ds:DataSnapshot.getChildren());
*//从Firebase数据库读取数据,并获取需要在新网格上显示的数据*
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
//初始化适配器
适配器=新的GridAdapter(此,元素);
lvPackage.setAdapter(适配器);
lvPackage.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//做点什么
Toast.makeText(OverviewPage.this,“尚未”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
受保护的void onStart(){
super.onStart();
mAuth1.addAuthStateListener(mAuthListener1);
}
}
这是我的Firebase数据库

例如,我只想在新网格上显示子键“title”和“pricePerGuest”


我知道我必须在我的孩子身上循环每一个孩子。但是,我不知道如何从addValueEventListener方法中添加的子项中获取一些特定数据。

此处的代码太多,无法通读,请您阅读并编辑您的问题好的。谢谢。这里有太多的代码需要通读,请您先阅读然后编辑您的问题好的。非常感谢。