使用runOnUiThread()的NullPointerException

时间:2014-12-23 06:41:12

标签: java android

所以我尝试使用runOnUiThread()更新我的LogUI(在我的应用程序MainActivity中找到),这是一个TextView。问题是我试图通过获取要在View上创建的字符串从另一个类使用runOnUiThread()来更新TextView。 以下是我的代码详细说明我的问题:

private LoggingClass getLogs;

getLogs.AddtoLogUI(String.format("Established on port: %d", obj));

然后是LoggingClass代码:

public class LoggingClass {

private MainActivity updateUI;
private String stringValue;

public void AddtoLogUI(final String format) {
    this.stringValue = format;
    updateUI.runOnUiThread(new Runnable(){

        @Override
        public void run() {
            MainActivity.log_this(stringValue);
        }

    });
}
}

方法MainActivity.log_this()代码如下:

public static void log_this(final String msg){

    if(editable.toString().split("\n").length >=50) {
        editable.delete(0, editable.toString().indexOf("\n"));
    }

    Runnable runnable = new Runnable(){
        @Override
        public void run() {
            editable.append(msg);
            editable.append("\n");
        }
    };

    LogView.post(runnable);
}

PS:LogView是一个TextView。

当我尝试使用getLogs.AddtoLogUI()方法获取字符串时,抛出NullpointerException。 有什么建议吗?

关于对象的

附加信息

`Object obj[] = new Object[1];
    obj[0] = Integer.valueOf(Port);`

2 个答案:

答案 0 :(得分:1)

您在private LoggingClass getLogs;中声明Activity getLogs=new LoggingClass (MainActivity.this)

中的onCreate

然后你可以使用getLogs.AddtoLogUI(String.format("Established on port: %d", obj));

创建LoggingClass构造函数

public class LoggingClass {

private MainActivity updateUI;
private String stringValue;


public LoggingClass (MainActivity updateUI){
this.updateUI=updateUI;
}


public void AddtoLogUI(final String format) {
    this.stringValue = format;
    updateUI.runOnUiThread(new Runnable(){

        @Override
        public void run() {
            MainActivity.log_this(stringValue);
        }

    });
}
}

答案 1 :(得分:0)

我自己使用处理程序解决了这个问题。以下是我所做的示例代码:

 Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
     public void run() {
          // UI code goes here
     }
});