尝试在空对象引用(Android)上调用虚方法

时间:2018-04-26 22:30:41

标签: android android-studio android-fragments

我试图制作一个存放用户的迷你手机钱包' firebase的详细信息。我收到了错误

  

尝试调用虚方法' void   android.widget.TextView.setText(INT)'在空对象引用上

使用setText()方法显示用户的余额。我在stackoverflow上提到了许多其他类似的问题,但没有任何帮助我。

以下是我认为我遇到问题的代码文件。

  

以下代码是否为片段(wallet_info.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:context=".PassBook">

<!-- TODO: Update blank fragment layout -->

<TextView
    android:layout_marginTop="250dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="25dp"
    android:id="@+id/walletText"
    android:text="Wallet Balance"/>

<TextView
    android:layout_margin="30dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="40dp"
    android:layout_below="@id/walletText"
    android:id="@+id/balanceText"/>

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/balanceText"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="32dp"
    android:text="Request Balance"
    android:onClick="onRequest"/>

 </RelativeLayout>

android:onClick="onRequest"显示一个红色下划线,要求我创建一个公共方法,即使我已经在附加了该片段的类中创建了该方法。

  

以下代码适用于home.java(附有wallet_info.xml片段的类。)我粘贴了我收到错误的部分。

public void onRequest(View view){
    tv = (TextView)findViewById(R.id.balanceText);
    wallet.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            wallet_info u = dataSnapshot.child(m).getValue(wallet_info.class);
            tv.setText(u.getBalance());
            //tv.setText(u.getBalance());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

tv.setText(u.getBalance());行会引发上述错误。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

这是因为您无法使用以下属性:

android:onClick="onRequest"

在Fragment的布局中。它只适用于活动。因此,您需要绑定balanceText视图并为View.onClickListener按钮创建button2

答案 1 :(得分:0)

虽然stackoverflow上的这样的问题没有我需要的答案,但我想出了解决方案。我不知道为什么它显示一个NULL POINTER EXCEPTION,即使我创建了一个TextView对象。通过将setText()中的参数的数据类型更改为字符串来解决该错误。

更改代码后问题得到解决,如下所示。

wallet_info u = dataSnapshot.child(m).getValue(wallet_info.class);
tv.setText(u.getBalance());

以上代码行已更改为 -

wallet_info u = dataSnapshot.child(m).getValue(wallet_info.class);
g = String.valueOf(u.getBalance());
tv.setText(g);

这解决了我的问题。