为了账号安全,请及时绑定邮箱和手机立即绑定

当我按下我的微调器时,我看到了我的数据,但是当我尝试选择它时,它没有设置数据?

当我按下我的微调器时,我看到了我的数据,但是当我尝试选择它时,它没有设置数据?

www说 2022-12-15 16:39:19
我正在尝试制作一个从实时 Firebase 数据库获取数据的微调器。我在我的日志语句中很好地提取了数据,当我按下下拉菜单时,我也看到了我的数据。但是当我尝试在微调器中选择某些内容时,它不会设置数据。此外,当我尝试调用我的 getSelectedItem() 方法时,它给了我错误java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference在我写的日志中没有空值,因此我很困惑为什么我会收到这种错误import android.content.Intent;import android.support.annotation.NonNull;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.Spinner;import com.example.bankapp.BankAccount;import com.example.bankapp.R;import com.google.firebase.database.DataSnapshot;import com.google.firebase.database.DatabaseError;import com.google.firebase.database.DatabaseReference;import com.google.firebase.database.FirebaseDatabase;import com.google.firebase.database.ValueEventListener;import java.util.ArrayList;public class TransferOwnAccount extends AppCompatActivity {    private Spinner accountFrom, accountTo;    private EditText transferAmount;    private FirebaseDatabase database;    ArrayList<BankAccount> accounts = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_transfer_own_account);        init();        loadAccounts();    }    public void transferMoney(View view) {        Log.d("grinern", "olool"+accountFrom.getSelectedItem().toString());    }它应该选择我在下拉微调器中按下的任何内容,并在我的日志中打印它,这是在我的 transferMoney() 方法中调用的
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

您需要将 bankaccounts arraylist 更改为静态(以确保即使状态发生变化也是如此)


然后我将适配器作为一个字段移动并在 init 方法中对其进行了初始化,检查我提供的代码:


package com.example.bankapp;


import android.content.Intent;

import android.support.annotation.NonNull;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.EditText;

import android.widget.Spinner;


import com.example.bankapp.BankAccount;

import com.example.bankapp.R;

import com.google.firebase.database.DataSnapshot;

import com.google.firebase.database.DatabaseError;

import com.google.firebase.database.DatabaseReference;

import com.google.firebase.database.FirebaseDatabase;

import com.google.firebase.database.ValueEventListener;


import java.util.ArrayList;


public class TransferOwnAccount extends AppCompatActivity {


    private Spinner accountFrom, accountTo;

    private EditText transferAmount;

    private FirebaseDatabase database;

    static  ArrayList<BankAccount> accounts = new ArrayList<>();

    ArrayAdapter<BankAccount> adapter;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_transfer_own_account);

        init();

        loadAccounts();


    }


    public void transferMoney(View view) {

        Log.d("test", "olool" + accountFrom.getSelectedItem().toString());

    }


    public void loadAccounts() {

        Intent getIntent = getIntent();

        String userCPR = getIntent.getStringExtra("CPR");

        DatabaseReference dbref = database.getReference("usersbankaccounts/" + userCPR);

        dbref.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override

            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot data : dataSnapshot.getChildren()) {

                    DatabaseReference bankaccounts = database.getReference("bankaccounts/" + data.getKey());

                    Log.d("test", data.getKey());

                    bankaccounts.addListenerForSingleValueEvent(new ValueEventListener() {

                        @Override

                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            BankAccount bankAccount = dataSnapshot.getValue(BankAccount.class);

                            accounts.add(bankAccount);

                            adapter.notifyDataSetChanged();


                            Log.d("test", "" + accounts);

                        }


                        @Override

                        public void onCancelled(@NonNull DatabaseError databaseError) {


                        }

                    });

                }

                Log.d("test", "" + accounts);



                adapter.notifyDataSetChanged();



            }


            @Override

            public void onCancelled(@NonNull DatabaseError databaseError) {


            }

        });


    }


    public void init() {

        this.adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, accounts);

        this.accountFrom = findViewById(R.id.transferFromSpinner);

        this.accountTo = findViewById(R.id.transferToSpinner);

        this.transferAmount = findViewById(R.id.transferAmount);

        this.database = FirebaseDatabase.getInstance();

        this.accountFrom.setAdapter(adapter);

        this.accountTo.setAdapter(adapter);


    }

}

然后你需要确保你的银行账户中有一个 toString() 方法


 @Override

    public String toString() {

        return title + "--- " +accNumber + "  " + balance ;

    }

这应该可以解决问题:)


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号