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

我正在尝试制作一个从实时 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() 方法中调用的


www说
浏览 138回答 1
1回答

收到一只叮咚

您需要将 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 {&nbsp; &nbsp; private Spinner accountFrom, accountTo;&nbsp; &nbsp; private EditText transferAmount;&nbsp; &nbsp; private FirebaseDatabase database;&nbsp; &nbsp; static&nbsp; ArrayList<BankAccount> accounts = new ArrayList<>();&nbsp; &nbsp; ArrayAdapter<BankAccount> adapter;&nbsp; &nbsp; @Override&nbsp; &nbsp; protected void onCreate(Bundle savedInstanceState) {&nbsp; &nbsp; &nbsp; &nbsp; super.onCreate(savedInstanceState);&nbsp; &nbsp; &nbsp; &nbsp; setContentView(R.layout.activity_transfer_own_account);&nbsp; &nbsp; &nbsp; &nbsp; init();&nbsp; &nbsp; &nbsp; &nbsp; loadAccounts();&nbsp; &nbsp; }&nbsp; &nbsp; public void transferMoney(View view) {&nbsp; &nbsp; &nbsp; &nbsp; Log.d("test", "olool" + accountFrom.getSelectedItem().toString());&nbsp; &nbsp; }&nbsp; &nbsp; public void loadAccounts() {&nbsp; &nbsp; &nbsp; &nbsp; Intent getIntent = getIntent();&nbsp; &nbsp; &nbsp; &nbsp; String userCPR = getIntent.getStringExtra("CPR");&nbsp; &nbsp; &nbsp; &nbsp; DatabaseReference dbref = database.getReference("usersbankaccounts/" + userCPR);&nbsp; &nbsp; &nbsp; &nbsp; dbref.addListenerForSingleValueEvent(new ValueEventListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onDataChange(@NonNull DataSnapshot dataSnapshot) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (DataSnapshot data : dataSnapshot.getChildren()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DatabaseReference bankaccounts = database.getReference("bankaccounts/" + data.getKey());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d("test", data.getKey());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bankaccounts.addListenerForSingleValueEvent(new ValueEventListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onDataChange(@NonNull DataSnapshot dataSnapshot) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BankAccount bankAccount = dataSnapshot.getValue(BankAccount.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; accounts.add(bankAccount);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adapter.notifyDataSetChanged();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d("test", "" + accounts);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onCancelled(@NonNull DatabaseError databaseError) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d("test", "" + accounts);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adapter.notifyDataSetChanged();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onCancelled(@NonNull DatabaseError databaseError) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }&nbsp; &nbsp; public void init() {&nbsp; &nbsp; &nbsp; &nbsp; this.adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, accounts);&nbsp; &nbsp; &nbsp; &nbsp; this.accountFrom = findViewById(R.id.transferFromSpinner);&nbsp; &nbsp; &nbsp; &nbsp; this.accountTo = findViewById(R.id.transferToSpinner);&nbsp; &nbsp; &nbsp; &nbsp; this.transferAmount = findViewById(R.id.transferAmount);&nbsp; &nbsp; &nbsp; &nbsp; this.database = FirebaseDatabase.getInstance();&nbsp; &nbsp; &nbsp; &nbsp; this.accountFrom.setAdapter(adapter);&nbsp; &nbsp; &nbsp; &nbsp; this.accountTo.setAdapter(adapter);&nbsp; &nbsp; }}然后你需要确保你的银行账户中有一个 toString() 方法&nbsp;@Override&nbsp; &nbsp; public String toString() {&nbsp; &nbsp; &nbsp; &nbsp; return title + "--- " +accNumber + "&nbsp; " + balance ;&nbsp; &nbsp; }这应该可以解决问题:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java