【问题标题】:How to update view in a method in called from another class?如何更新从另一个类调用的方法中的视图?
【发布时间】:2020-10-22 06:04:12
【问题描述】:

在 A 类中有一个更新视图的方法。

首先我调用 B 类下载一些数据,一旦收到数据我调用 A 类中的方法。

当视图更新时(当从类 b 调用方法时),视图会抛出 NPE。

但是,如果视图被更新(当从其本机类(A 类)调用时)它会完美运行。

A 类是一项活动。

在某些情况下,它报告存在某种上下文问题。

我尝试过实现一个接口,但即使它抛出了 NPE

我该如何解决这个问题?

public class A extends activity {
   public() {
   }
   B b = new B();
   b.doSomething();

   public void myMethod(String string) {
     textView.setText(string)
   }
}

public class B {
  public void doSomething() {
     String data = getData;
     A a = new A();
     a.myMethod(data)
  }
}

【问题讨论】:

  • A 类是Activity 吗?显示您的代码。
  • @codebod 是的,它是和活动

标签: android methods view nullpointerexception android-context


【解决方案1】:

您不应致电new A()。这不会调用具有应用程序生命周期的新 Activity,也不会为您提供对包含您尝试更新的 View 的原始 Activity 的引用。

我建议A 应该实现一个简单的接口YourInterface,其中包含一个void callbackMethod(String data);

将您的对象A(如this)传递给B,例如在doSomething(this)上,将doSomething的签名更改为doSomething(YourInterface callback)

然后您可以在B 中调用callback.callbackMethod(data),在您的活动A 中处理data

【讨论】:

  • 好的,谢谢,我再遇到问题再试试。现在我正在使用广播接收器在类之间进行通信。
  • 原因是有时您可能希望从一个类调用服务并在收到数据后更新第二个类。在这种情况下,您不能传递相同的回调。
  • 很公平,但这与原始问题完全不同。如果我的回答已经解决了您最初的问题,如果您能接受这个答案,我们将不胜感激。
  • 我意识到它是不同的,我的意思是在这方面使用界面会限制你。
  • 我会在不久的将来再次测试你的答案并告诉你谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多