Java 尝试从其他类更改textView中的文本时出现NullPointerException

Java 尝试从其他类更改textView中的文本时出现NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,你能帮我理解为什么当我想在TextView中设置文本时,我得到了NullPointerException?我知道,因为我的TextView为空,但我如何才能再次获得TextView 我的逻辑是: 启动应用程序 点击按钮 处理完成后,转到nullPoint并从firebase获取数据,返回到MainActivity并更新TextView中的文本 这是我的示例代码: main活动 public class MainActivity extends AppCompatActivity { @

你能帮我理解为什么当我想在
TextView
中设置文本时,我得到了
NullPointerException
?我知道,因为我的
TextView
为空,但我如何才能再次获得
TextView

我的逻辑是:

  • 启动应用程序
  • 点击按钮
  • 处理完成后,转到
    nullPoint
    并从firebase获取数据,返回到
    MainActivity
    并更新
    TextView
    中的文本
  • 这是我的示例代码:

    main活动

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button btnAddNewWord = findViewById(R.id.button);
            btnAddNewWord.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    nullPoint np = new nullPoint();
                    np.takeCount();
                }
            });
        }
    
        public void setTextView(int count){
            TextView tv = findViewById(R.id.textView);
            tv.setText("count = " + count);
        }
    }
    
    nullPoint

    public class nullPoint {
    
        //the class gets asynchronous data from the Firebase database and does not know when the process will end
        public void takeCount(){
    
            //det data
            //.
            //.
            // finish
    
            //send data to MainActivity and update textView text
            MainActivity ma = new MainActivity();
            ma.setTextView(5);
        }
    }
    
    XML

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity"
        android:layout_gravity="center">
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:layout_gravity="center"/>
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:layout_gravity="center"/>
    </LinearLayout>
    

    我猜
    nullPoint
    类不在
    main活动中。因此,在您的
    nullPoint
    类中,您尝试在其中设置数据的
    TextView
    没有引用

    在您的情况下,我建议您实现如下侦听器

    public interface FirebaseResponseListener {
        void onFirebaseResponseReceived(int count); 
    }
    
    现在,从您的
    main活动
    ,您需要实现侦听器,如下所示

    public class MainActivity extends AppCompatActivity implements FirebaseResponseListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button btnAddNewWord = findViewById(R.id.button);
            btnAddNewWord.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    nullPoint np = new nullPoint();
                    np.listener = this; // Initialize the listener here
                    np.takeCount();
                }
            });
        }
    
        public void setTextView(int count){
            TextView tv = findViewById(R.id.textView);
            tv.setText("count = " + count);
        }
    
        @Override
        void onFirebaseResponseReceived(int count) {
            setTextView(count);
        }
    }
    
    您还必须在
    nullPoint
    类中添加一个侦听器

    public class nullPoint {
        public FirebaseResponseListener listener; 
    
        //the class gets asynchronous data from the Firebase database and does not know when the process will end
        public void takeCount(){
    
            //det data
            //.
            //.
            // finish
    
            //send data to MainActivity and update textView text
            listener.onFirebaseResponseReceived(5);
        }
    }
    

    希望这能解决您的问题。

    nullPoint
    类是在您的
    main活动中定义的
    ?谢谢Reaz Murshed,是的,您解决了我的问题:)