亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我按下我的微調器時,我看到了我的數據,但是當我嘗試選擇它時,它沒有設置數據?

當我按下我的微調器時,我看到了我的數據,但是當我嘗試選擇它時,它沒有設置數據?

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 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號