And*_*ker 0 java android onclick android-asynctask
这是应该执行某些操作的代码的一部分,然后调用onPostExecute事件.
出于某种原因,它没有调用它,并且在eclipse中我可以看到该方法用黄色标记(未使用的方法)...
我无法理解为什么这样...
你知道为什么吗?
谢谢!
PS:我在这里看了一些帖子,没找到我的解决方案......
final ImageButton sync = (ImageButton) findViewById(R.id.syncChanges);
sync.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sync.setImageResource(R.drawable.none);
sync.setBackgroundResource(R.drawable.animation);
final AnimationDrawable frameAnimation = (AnimationDrawable) sync.getBackground();
frameAnimation.start();
class DownloadFilesTask extends AsyncTask<String, Void, String[]> {
protected String[] doInBackground(String...strings) {
try {
OptionScraper.run(strings[0], Integer.parseInt(strings[1]));
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return OptionScraper.GetChanges();
}
protected void onPostExecute() {
InitChangesToText();
frameAnimation.stop();
sync.setImageResource(R.drawable.sync);
}
}
new DownloadFilesTask().execute(classLetter,classNum);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 6
你没有onPostExecute()正确地压倒一切.它需要一个参数(您返回的对象doInBackground()).但是您使用不带参数的签名覆盖/创建方法.这意味着框架调用默认实现而不是您自己的实现.什么都不做.
所以改变
protected void onPostExecute() {
Run Code Online (Sandbox Code Playgroud)
至
protected void onPostExecute(String[] result) {
Run Code Online (Sandbox Code Playgroud)
在这种情况下.我还建议@Override为该方法添加一个注释,在这种情况下,eclipse或类似的工具应该首先指出.