有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 安卓视图未从其他类和其他线程更新

我试图在活动中更新TextView,更新视图的方法在主活动中(正常情况),但调用此方法是从另一个类(和另一个线程)进行的

这是更新视图的方法,此方法位于主活动中, (请注意,所有日志均按正确顺序正确打印):

    public void getDataFromFiles() {
    String new_text = JsonReader.readTextData(dataName,activityName, this);
    Log.i("Loading", "loaded text " + new_text  );
    if (new_text != null) {
        TextView introText = (TextView) findViewById(R.id.loading_introTxt);
        introText.setText(new_text);
    }

}

这是从另一个名为LoadingThread的类调用它的地方,它具有引用(loadingActivity):

            activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.i("LoadingThread", "Will update loading screen");
                loadingActivity.getDataFromFiles();

            }
        });

还要注意如何从主活动调用LoadingThread类

    LoadingThread loadingThread = LoadingThread.getInstance(this);
    Thread thread = new Thread(loadingThread);
    loadingThread.setActivity(this);
    thread.start();

这就是流程: 主活动启动LoadingThread,然后在此之后再次调用主活动中的一个方法,该方法应该更新视图,但这不会发生,但当关闭应用程序并再次重新打开它时,更新就会出现


共 (1) 个答案

  1. # 1 楼答案

    我发现了问题,是在

    LoadingThread loadingThread = LoadingThread.getInstance(this);
    Thread thread = new Thread(loadingThread);
    loadingThread.setActivity(this);
    

    而getInstance()是:

        if (instance == null) {
            instance = new LoadingThread();
            instance.loadingActivity = loadingActivity;
    
        }
        return instance;
    

    当关闭并重新打开应用程序时,实例不为null,因此返回以前的活动,因为加载活动时的引用未更新,所以不再在此处,因此我将其更改为那样

        if (instance == null) {
            instance = new LoadingThread();
        }
        instance.loadingActivity = loadingActivity;
        return instance;
    

    现在它工作了