无法从另一个类更新主活动文本视图



In MainActivity:

 private TextView log;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    log= (TextView) findViewById(R.id.log);
 }
 public void showMessage(final int messageType, final String msg){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
               log.setText(msg); // here is the problem
            }
         }
 });

在日志类中:

 private static MainActivity mainActivity;
 public logClass() {
    mainActivity = new MainActivity();
 }
 public void log() {
    try {
        mainActivity.showMessage(MessageTag.TIP, "Connecting...");
    } catch(Exception el) {
        el.printStackTrace();
    }
 }

在调用片段中:

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.start:
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        logClass.log();
                    }
                }).start();
        }
    }

但是我遇到了这个问题:

FATAL EXCEPTION: main
              Process: com.test.testing, PID: 7636
              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.<init>(AppCompatDelegateImplBase.java:117)
                  at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
                  at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
                  at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
                  at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)
                  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 com.test.testing.MainActivity$2.run(MainActivity.java:97)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:135)
                  at android.app.ActivityThread.main(ActivityThread.java:5254)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

我认为您不能从另一个活动编辑另一个活动中的内容。

从另一个活动编辑数组

这个答案详细说明了如果可能的话如何完成。

如果callFragmentMainActivity上膨胀,那么你可以简单地这样做。

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.start:
                ((MainActivity) getActivity()).showMessage(MessageTag.TIP, "Connecting...");
        }
    }

我也没有在您的代码中找到线程的使用。因为如果安卓默认在主线程上运行,可以改变你的视图。因此,您可以删除多余的线程包装代码。

最新更新