gpt4 book ai didi

android - 没有用于警告 Firebase 数据库检索数据填充 ListView 的 setter /字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:40 24 4
gpt4 key购买 nike

我只是想将 Firebase 数据库中的数据填充到我的 ListView 中。日志显示正在检索数据,但适配器不会将值设置为列表中单个列表项中的文本?它只是说“INSERT VALUE 没有 setter /字段”。这让我觉得我没有正确制作我的 setter ,但 Android Studio 自动生成了 setter 。我不知道我在这里错过了什么。任何帮助表示赞赏。

节点对象

package com.megliosolutions.ipd.Objects;

import android.graphics.Bitmap;

/**
* Created by Meglio on 6/13/16.
*/
public class NodeObject {


public String mStaticAddress;
public String mLat;
public String mLong;

public NodeObject(){
//needed for firebase
}

public NodeObject(String address, String lat, String Long){
this.mStaticAddress = address;
this.mLat = lat;
this.mLong = Long;
}

public String getmStaticAddress() {
return mStaticAddress;
}

public void setmStaticAddress(String mStaticAddress) {
this.mStaticAddress = mStaticAddress;
}

public String getmLat() {
return mLat;
}

public void setmLat(String mLat) {
this.mLat = mLat;
}

public String getmLong() {
return mLong;
}

public void setmLong(String mLong) {
this.mLong = mLong;
}
}

静态列表适配器

/**
* Created by Meglio on 6/14/16.
*/
public class StaticListAdapter extends ArrayAdapter<NodeObject> {
public static String TAG = StaticListAdapter.class.getSimpleName();
public Context mContext;
public List<NodeObject> mNodes;

public class ViewHolder {
TextView mStaticAddress;
TextView mLAT;
TextView mLONG;

}

@Override
public int getCount() {
return mNodes.size();
}

public StaticListAdapter(Context context, List<NodeObject> objects) {
super(context, R.layout.activity_main, objects);
this.mContext = context;
this.mNodes = objects;
}

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
NodeObject node = mNodes.get(position);
if (convertView == null) {
convertView = LayoutInflater.from(this.mContext).inflate(R.layout.node_item, null);
holder.mLONG = (TextView) convertView.findViewById(R.id.node_item_LONG);
holder.mStaticAddress = (TextView) convertView.findViewById(R.id.node_item_IP);
holder.mLAT = (TextView) convertView.findViewById(R.id.node_item_LAT);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mStaticAddress.setText(node.getStaticAddress());
holder.mLONG.setText(node.getLongitude());
holder.mLAT.setText(node.getLatitude());

return convertView;
}
}

主要 Activity

public class MainActivity extends AppCompatActivity {

public static String TAG = MainActivity.class.getSimpleName();

public ListView main_ListView;
public FirebaseAuth mAuth;
public FirebaseUser mUser;
public DatabaseReference mDatabase;

//Strings
public String static_ip;
public String lat = "5.0";
public String mLong = "4.0";
public String currentUser;

//Adapters
public StaticListAdapter listAdapter;

//Node Object
NodeObject node;
public List<NodeObject> nodesList;




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

//Instances
mAuth = FirebaseAuth.getInstance();
mUser = mAuth.getCurrentUser();
mDatabase = FirebaseDatabase.getInstance().getReference();
currentUser = mUser.getUid();

main_ListView = (ListView)findViewById(R.id.Main_listview);

//Toolbar
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//[End of Toolbar]
nodesList = new ArrayList<>();

retrieveData();

listAdapter = new StaticListAdapter(getApplicationContext(),nodesList);

main_ListView.setAdapter(listAdapter);


Log.i(TAG, "USER: " + currentUser);


}

private void retrieveData() {
mDatabase.child("nodes").child(mUser.getUid())
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

NodeObject nodeObject = dataSnapshot.getValue(NodeObject.class);

listAdapter.add(nodeObject);
listAdapter.setNotifyOnChange(true);
}

@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(DatabaseError databaseError) {

}
});
}


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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.getGPS:
//nothing
return true;
case R.id.addNode:
addNode();
return true;
case R.id.logout:
signOut();
return true;

default:
return super.onOptionsItemSelected(item);
}
}





private void signOut() {
mAuth.signOut();
Intent intent = new Intent(MainActivity.this, Login.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Toast.makeText(getApplicationContext(), "Logging Out.", Toast.LENGTH_SHORT).show();
startActivity(intent);

}

private void addNode() {
//AlertDialog
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);

dialogBuilder.setTitle("Dude, assign something...");

LayoutInflater inflater = this.getLayoutInflater();

View dialogView = inflater.inflate(R.layout.main_add_node_dialog, null);

dialogBuilder.setView(dialogView);

final EditText editText = (EditText)
dialogView.findViewById(R.id.static_et);
dialogBuilder.setPositiveButton("Assign", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
static_ip = editText.getText().toString();
String ip = static_ip;
node = new NodeObject(ip, lat, mLong);
mDatabase.child("nodes").child(currentUser).push().setValue(node);
Toast.makeText(getApplicationContext(), "Static IP: " + static_ip + " assigned!"
, Toast.LENGTH_SHORT).show();
}
}).
setNegativeButton("Or Not...", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Fine, nvm then..."
, Toast.LENGTH_SHORT).show();
}
});

dialogBuilder.create().show();
}




}

调试表明我能够在客户端获取所有内容。日志也显示了这一点。

06-18 18:25:42.981 12962-12962/com.megliosolutions.ipd D/MainActivity: zHF4TGnRvkeXEbKiLegiUNLGHX12:{-KKLeBAe9pV1Umm3qQMo={mStaticAddress=26161910494949, mLong=3.0, mLat=2.0}, -KKG_ACFvdX7aJOR98-o={mStaticAddress=10.223.22.250, mLong=3.0, mLat=2.0}, -KKWKMZS7WkE_xWbL3rC={mStaticAddress=, mLong=4, mLat=5}, -KKQQLITf9-7iMFlqEWR={mStaticAddress=123123123123, mLong=3.0, mLat=2.0}, -KKG_J6PKwogjBFdk52Z={mStaticAddress=10.333.555.888, mLong=3.0, mLat=2.0}}

enter image description here

更新

对我来说没有意义的部分,但我相信对于那些非常了解它的人来说是有意义的。正在理解我正在阅读的 firebase 文档。我读了几次,但我猜它只是没有点击。我发现在 firebase 中构建数据是关键。没有它,您将无法正确编码,因为一切都依赖于它。 Firebase 使它变得易于使用,因为我看到它可以正常工作。我将就此发表一篇博客文章来解释我的麻烦以及如何超越它们,这样就没有其他人遇到这个烂摊子了。下面的代码将构建一个带有 firebase 后端的功能 ListView !

public void onChildAdded(DataSnapshot dataSnapshot, String s) {

Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

NodeObject nodeObject = dataSnapshot.getValue(NodeObject.class);

listAdapter.add(nodeObject);
listAdapter.setNotifyOnChange(true);
}

最佳答案

retrieveData() , 你应该使用 ChildEventListener , 不是 ValueEventListener .您正在添加 Node作为 node/$uid 的 child 的对象使用 push() 生成的 key . ValueEventListener正在返回 Map<String,Object>包含所有 Nodes .这显示在 logcat 中你发布的输出。您可以使用 onChildAdded() ChildEventListener的回调得到每个 Node在创建时将其添加到您的适配器中。

关于android - 没有用于警告 Firebase 数据库检索数据填充 ListView 的 setter /字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com