【问题标题】:Firebase get data using key valueFirebase 使用键值获取数据
【发布时间】:2017-07-20 21:46:34
【问题描述】:

我正在使用 FirebaseListAdapter 开发一个列表应用程序。我的 getKey() 值有问题。我想访问被单击的列表项下的数据并将其显示在另一个活动的文本视图中。但我不知道该怎么办?

这是我的代码现在的样子

   myList.setAdapter(myAdapter);
    myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Story st = (Story)parent.getItemAtPosition(position);
            String stry = st.Story;
            Toast.makeText(MainActivity.this, ""+stry,Toast.LENGTH_LONG).show();

            Intent intent = new Intent(context, MyStoryActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Bundle bundle = new Bundle();
            bundle.putString("Story", stry);
            intent.putExtras(bundle);
            context.startActivity(intent);
        }
    });
}

当我单击任何列表项时,我将获得最后添加的故事的故事值。

这是我要显示故事值的另一个活动的代码。

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

    database = FirebaseDatabase.getInstance();
    ref = database.getReference("Stories");
    ttl = (TextView) findViewById(R.id.title);
    stry = (TextView) findViewById(R.id.story);
    Bundle bundle = getIntent().getExtras();
    stry1 = bundle.getString("Story");



    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Story ad = dataSnapshot.getValue(Story.class);

                ttl.setText(ad.Title);
                stry.setText(stry1);
        }

        @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) {

        }
    });

}

这就是我的数据库的样子

这里是 Story.class

public class Story {

public String Title;
public String Story;

// Default constructor required for calls to
// DataSnapshot.getValue(User.class)
public Story() {
}

public Story(String ttl, String stry) {
    this.Title = ttl;
    this.Story = stry;
}}

【问题讨论】:

  • 显示您的Story 课程
  • @PhátPhát 添加了 stroy.class

标签: android firebase firebase-realtime-database


【解决方案1】:

使用Parcelable 将对象发送到另一个Activity

关注tutorial

【讨论】:

  • 不!单击时,它仍会显示每个项目的最后添加的故事。
  • 我刚刚编辑了答案。这与 firebase 无关,您想在活动之间进行通信
  • 它对我有什么帮助?因为 Bundle() 函数也在发送值。
【解决方案2】:
    myList.setAdapter(myAdapter);
    myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Story story = myAdapter.getItem(position);
            String st = story.getStory();
            String tt = story.getTitle();


            Intent intent = new Intent(context, MyStoryActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Bundle bundle = new Bundle();
            bundle.putString("Story", st);
            bundle.putString("Title",tt);
            intent.putExtras(bundle);
            context.startActivity(intent);
        }
    });
}

我通过将我的 Story.class 的变量定义为被单击的项目位置并通过变量获取数据来得到解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2017-10-14
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多