Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从其他类指向UI中的对象-Android SDK_Java_Android_Class - Fatal编程技术网

Java 从其他类指向UI中的对象-Android SDK

Java 从其他类指向UI中的对象-Android SDK,java,android,class,Java,Android,Class,我刚刚开始使用Android进行开发,对Java几乎没有经验。我的主要活动中有一个按钮侦听器,但我想执行一个后台任务,更新UI中的文本视图。请参阅下面的代码 btnJSON.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { new BGTask().execute(); } cla

我刚刚开始使用Android进行开发,对Java几乎没有经验。我的主要活动中有一个按钮侦听器,但我想执行一个后台任务,更新UI中的文本视图。请参阅下面的代码

    btnJSON.setOnClickListener(new Button.OnClickListener()
    {
        public void onClick(View v)
        {
            new BGTask().execute(); 
        }

        class BGTask extends AsyncTask<Void, Void, String> {
            protected String doInBackground(Void... params) {
                Thread.sleep(2000);
                String x = "test";
                return (String) x;   
            }   


            protected void onPostExecute(String result) {
                tvData.setText(result);
            }
        }            
    });
btnJSON.setOnClickListener(新建按钮.OnClickListener()
{
公共void onClick(视图v)
{
新建BGTask().execute();
}
类BGTask扩展了异步任务{
受保护字符串doInBackground(无效…参数){
《睡眠》(2000年);
字符串x=“测试”;
返回(字符串)x;
}   
受保护的void onPostExecute(字符串结果){
tvData.setText(结果);
}
}            
});
但是,当我将BGTask代码的代码移动到一个单独的类文件中时,就无法再更新UI组件tvData了。如何将对该对象的引用传递给BGTask类


谢谢

如果要将任务类移动到另一个文件,您需要做的是:

  • 将TextView字段添加到BGTask和接受TextView的构造函数
  • 传入要更新的文本视图
  • 代码如下:

    public class BGTask extends AsyncTask<Void, Void, String> {
        private TextView tvData = null;
    
        public BGTask(TextView tv) {
            this.tvData = tv;
        }
    
        protected String doInBackground(Void... params) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            String x = "test";
            return (String) x;
        }
    
        protected void onPostExecute(String result) {
            if (tvData != null)
                tvData.setText(result);
        }
    }
    

    如果要将任务类移动到另一个文件,需要执行以下操作:

  • 将TextView字段添加到BGTask和接受TextView的构造函数
  • 传入要更新的文本视图
  • 代码如下:

    public class BGTask extends AsyncTask<Void, Void, String> {
        private TextView tvData = null;
    
        public BGTask(TextView tv) {
            this.tvData = tv;
        }
    
        protected String doInBackground(Void... params) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            String x = "test";
            return (String) x;
        }
    
        protected void onPostExecute(String result) {
            if (tvData != null)
                tvData.setText(result);
        }
    }