我试图制作一个存放用户的迷你手机钱包' 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());
行会引发上述错误。
提前谢谢。
答案 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);
这解决了我的问题。