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); } } 所以我得到的消息是:
我怎样才能解决这个问题?这是一些访问问题吗? 解决方法
您将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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |