java - 无法通过回调方法更新textview

标签 java android interface nullpointerexception callback

我在 MainActivity 中实现了一个接口(interface),在该回调方法中我想更新我的 TextView,但我收到了空指针异常。

这是我的 MainActivity 类

public class MainActivity extends AppCompatActivity implements GenericCallback
{

    Context mcontext;
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mcontext = this;

        Button btn = findViewById(R.id.btn);
        tv = findViewById(R.id.tv);
        btn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });

    }

    @Override
    public void doSomething(Context context, String... a)
    {
        Toast.makeText(context,"Calback"+a[0]+a[1],Toast.LENGTH_SHORT).show();
        tv = findViewById(R.id.tv);//Line 43
        tv.setText(a[0]+a[1]);
    }

我的界面是这样的

public interface GenericCallback
{
    void doSomething(Context context, String... a);
}

我的第二个 Activity

public class SecondActivity extends AppCompatActivity
{
    Context context;
    GenericCallback genericCallback = new MainActivity();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        context = this;
        String a="Secomd",b = "Activity";
        genericCallback.doSomething(context,a,b);
        finish();
    }
}

堆栈跟踪

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:117) at android.support.v7.app.AppCompatDelegateImplV9.(AppCompatDelegateImplV9.java:149) at android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:56) at android.support.v7.app.AppCompatDelegateImplV23.(AppCompatDelegateImplV23.java:31) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:200) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at android.com.callback.MainActivity.doSomething(MainActivity.java:43) at android.com.callback.SecondActivity.onCreate(SecondActivity.java:21)

我已经知道什么是空指针,我已经提到了thisthis

最佳答案

您可以使用EventBus Library

用于安装

compile 'org.greenrobot:eventbus:3.1.1'

首先,创建一个Java类

public class MsgEvent {
String oo;

public String getOo() {
    return oo;
}

public void setOo(String oo) {
    this.oo = oo;
}
}

然后在SecondActivity中

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    context = this;
    String a="Secomd",b = "Activity";
    MsgEvent msgEvent = new MsgEvnet();
    msgEvent.setOo(a);
    EventBus.getDefault().post(msgEvent);
    finish();
}

然后在MainActivity中

@Override
public void onStart() {
 super.onStart();
 EventBus.getDefault().register(this);
}

@Override
public void onStop() {
 super.onStop();
 EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MsgEvent event) {
String value = event.getOo();
}

关于java - 无法通过回调方法更新textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50059436/

相关文章:

java - Java中的构造函数可以抛出异常吗?

android - 从哪里加载 WebView 中保存的 HTML?

c# - 为什么接口(interface)实例有 GetType、GetHashCode、Equals 和 ToString 方法?

android - 在 ListView 项目中单击按钮的自定义监听器

android - sqlite 数据库在设备上的位置

ios - 无法在界面生成器中创建新的导出,旧的有警告符号

java - Lint 将 Kotlin MutableMap.forEach() 视为 java.util.Map.forEach()

java - 如何清除扩展 AbstractTableModel 的自定义 TableModel

java - 在微调器中选择项目后如何获取微调器值

android - 无法将 android.support.v7 添加到我的项目构建路径