0

我已经使用 Tools -> Firebase 为应用程序设置了 Firebase,并将 Internet 访问添加到 manifest。我试图从孩子那里获取字符串以保存在应用程序上,以便以后在进一步开发时使用它们。我不关心身份验证,所以据我收集的用户 ID 过程是无关紧要的。主文件的第一部分有写作方面,当其他所有内容都被注释掉时,应用程序运行并正常工作。所以问题出在阅读上。

Firebase 数据库现在的样子

// MainActivity.java:

    public class MainActivity extends AppCompatActivity {

        private DatabaseReference mDatabase;


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

            mDatabase = FirebaseDatabase.getInstance().getReference("Strings");


            Button sendBtn = (Button) findViewById(R.id.sendBtn);
            EditText stringText = (EditText) findViewById(R.id.stringText);
            TextView textView = (TextView) findViewById(R.id.textView);


            sendBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    FirebaseDatabase database = FirebaseDatabase.getInstance();
                    DatabaseReference myRef = database.getReference("message");

                    myRef.setValue("I can send text to this from Android App");
                }

            });


            mDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    showData(dataSnapshot);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }

        private void showData(DataSnapshot dataSnapshot) {
            StringExchange stringX = new StringExchange();
            stringX.setPhoneNum(dataSnapshot.getValue(StringExchange.class).getPhoneNum());
            stringX.setTrapID(dataSnapshot.getValue(StringExchange.class).getTrapID());
            stringX.setActive(dataSnapshot.getValue(StringExchange.class).getActive());
            Toast.makeText(getBaseContext(), "Strings Saved", Toast.LENGTH_SHORT).show();
        }
   }




 // class: StringExchange.java:
    package com.snaresense.firebase;

    /**
     * Created by Kevin on 10/21/2017.
     */

    public class StringExchange {
        String PhoneNum;
        String Active;
        String TrapID;

        public StringExchange(){
        }
        public String getPhoneNum(){
            return PhoneNum;
        }
        public void setPhoneNum(String PhoneNum){
            this.PhoneNum = PhoneNum;
        }
        public String getActive(){
            return Active;
        }
        public void setActive(String Active){
            this.Active = Active;
        }
        public String getTrapID(){
            return TrapID;
        }
        public void setTrapID(String TrapID){
            this.TrapID = TrapID;
        }
    }
4

2 回答 2

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



    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String Active = dataSnapshot.child("snaresense").child("strings").child("StringActive").getValue(String.class);
            String BatteryLevel = dataSnapshot.child("snaresense").child("strings").child("StringBatteryLevel").getValue(String.class);
            String TrapId = dataSnapshot.child("snaresense").child("strings").child("StringTrapId").getValue(String.class);
            String fireData = ("Hello. Trap: "+TrapId+" has been activated. The battery level is: "+BatteryLevel);
            String usrnum = dataSnapshot.child("snaresense").child("strings").child("StringPhoneNum").getValue(String.class);
            sendMsg (usrnum, fireData);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

阅读部分有效,sendMsg 部分仅用于与最终应用程序发送短信。

于 2017-11-21T16:40:50.540 回答
0

您的 showData 功能有点混乱。尝试将其更改为:

 private void showData(DataSnapshot dataSnapshot) {
        StringExchange stringX = dataSnapshot.getValue(StringExchange.class);
        Toast.makeText(this, "Strings Saved", Toast.LENGTH_SHORT).show();
    }

如果它仍然不起作用,请详细说明确切的问题是什么?它崩溃了吗?如果是,则共享日志。如果它没有按预期工作,那么解释什么不起作用。

于 2017-10-22T07:56:20.507 回答