【问题标题】:Accessing function from running activity in another class (android)从另一个类(android)中运行的活动访问函数
【发布时间】:2020-08-27 12:04:00
【问题描述】:

我正在创建一个 android 应用程序,我试图从另一个类的线程中的正在运行的片段访问一个方法,但是,在我当前的实现中,我在粗体线上收到一个空指针错误:FirstFragment.getInstance ().onReceive(incomingMessage);

public void run(){
        byte[] buffer = new byte[1024];  // buffer store for the stream

        int bytes; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs
        while (true) {
            // Read from the InputStream
            try {
                bytes = mmInStream.read(buffer);
                String incomingMessage = new String(buffer, 0, bytes);

                **FirstFragment.getInstance().onReceive(incomingMessage);**

                Log.d(TAG, "InputStream: " + incomingMessage);
            } catch (IOException e) {
                Log.e(TAG, "write: Error reading Input Stream. " + e.getMessage() );
                break;
            }
        }
    }

在 FirstFragment 类中初始化了一个静态实例变量,我使用 getter 函数在此类中访问它。还有另一种方法可以正确访问此方法吗?谢谢。

【问题讨论】:

    标签: android android-studio android-fragments android-activity


    【解决方案1】:

    如果您从FirstFragment 内部调用run() 函数,只需创建一个充当侦听器的接口,您的代码将如下所示:

        public interface OnReceiveListener {
        void onReceive(String incomingMessage);
    } 
    
    
    public void run(OnReceiveListener  listener){
            byte[] buffer = new byte[1024];  // buffer store for the stream
    
            int bytes; // bytes returned from read()
    
            // Keep listening to the InputStream until an exception occurs
            while (true) {
                // Read from the InputStream
                try {
                    bytes = mmInStream.read(buffer);
                    String incomingMessage = new String(buffer, 0, bytes);
    
    
                    listener.onReceive(incomingMessage)    
                    Log.d(TAG, "InputStream: " + incomingMessage);
                } catch (IOException e) {
                    Log.e(TAG, "write: Error reading Input Stream. " + e.getMessage() );
                    break;
                }
            }
        }
    

    然后,当您覆盖 onReceive(someString) 方法并在其中调用您希望的任何函数时,您可以调用片段内的任何方法

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 2018-03-15
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多