加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在运行之前访问Runnable的方法

发布时间:2020-12-15 04:21:17 所属栏目:Java 来源:网络整理
导读:我试图将Runnable传递给AsyncTask,然后将doInBackgroud的结果??设置为它并运行它. 我正在尝试以下代码但没有成功. // MyActivity.javapublic void click(View v) { if(v.getId() == R.id.button) { new AsyncHTTP(myAsyncClassCallback()).execute(); }}publ
我试图将Runnable传递给AsyncTask,然后将doInBackgroud的结果??设置为它并运行它.

我正在尝试以下代码但没有成功.

// MyActivity.java
public void click(View v) {
    if(v.getId() == R.id.button) {
        new AsyncHTTP(myAsyncClassCallback()).execute();
    }
}

public Runnable myAsyncClassCallback() {
    return new StringRunnable() {
        @Override
        public void run() {
            Log.v(DEBUG_TAG,result.toString());
        }
    };
}
// StringRunnable.java
public class StringRunnable implements Runnable {
    volatile String result;

    public void setResult(String res) {
        this.result = res;
    }

    @Override
    public void run() {
        // do something with result
    }
}
// MyAsyncClass.java
public class MyAsyncClass extends AsyncTask<String,Integer,String>{

    private Runnable myCallback;

    public MyAsyncClass(Runnable runnable){
        this.myCallback = runnable;
    }

    @Override
    protected String doInBackground(){
        // works normally
        return someString;
    }

    @Override
    protected void onPostExecute(String result) {
        myCallback.setResult(result); // <--- This is my question
        myCallback.run();
        super.onPostExecute(result);
    }
}

所以我得到的消息是:

Cannot resolve method setResult

我怎样才能解决这个问题?这是一些访问问题吗?

解决方法

您将myCallback声明为Runnable,但Runnable不包含setResult(String result)的定义.但是,你的扩展课程确实如此.这意味着您应该将Runnable转换为StringRunnable,它实际上是

((StringRunnable)myCallback).setResult(result);

或者您应该将myCallback声明为StringRunnable

private StringRunnable myCallback;

编辑:正如Unihedron指出的那样,最后一个选项意味着您还必须更改构造函数

private StringRunnable myCallback;

public MyAsyncClass(StringRunnable runnable){
    this.myCallback = runnable;
}

但是,我应该注意,在您的情况下,不必使用两个非UI线程. AsyncTask也是一个Thread

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读