所以我尝试使用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);`
答案 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
}
});