我想从asynctask返回一个值到main ui(不是消息)。
我发现它的最佳和最简单的解决方案是https://github.com/levinotik/ReusableAsyncTask/tree/master/src/com/example来自其他帖子。
然而,我的代码调用中的asynctask.setOnResultsListener(this)
asFtp在Eclipse中给出了一个错误:
setOnResultsListener(ResultsListener)
类型中的方法MainActivity.asFTP
不适用于参数(new View.OnClickListener(){}
)
我认为假设/想象问题,但是如何以最简单的方式解决它?
Button btn_copiar = (Button) findViewById(R.id.btn_copiar);
btn_copiar.setOnClickListener(new OnClickListener(){
public void onClick (View v) {
try {
asFtp = new asFTP();
if (comprobar_preferencias()){
Log.d(TAG, prefServidor + " " + String.valueOf(prefPuerto) + " " + prefUsuario + " " + prefPass);
asFtp.setOnResultsListener(this); // here I get the eclipse error
asFtp.execute();
感谢。
答案 0 :(得分:0)
首先,当您在创建新对象时引用 this 时, this 引用该对象。
您说onClickListener是ResultListener。我猜你创建onClickListener的类是实现onResultListener接口的类。
例如,如果你有
public class MyClass {
private int test;
public void example() {
// this refers to MyClass here (the current scope)
this.test = 0;
OnClickListener listener = new View.OnClickListener() {
// Now we are in the intalization of a new Object.
// "this" refers to the OnClickListener that you are creating
}
}
}
例如,在这种情况下,如果要在OnClickListener的创建块中引用MyClass,则只需引用该类的名称。例如:
public class MainActivity extends Activity implements OnReultsListener {
private int test;
public void example() {
this.test = 0;
OnClickListener listener = new View.OnClickListener() {
asFtp = new asFTP();
asFtp.setOnClickListener(MainActivity.this)'
... whatever else you need ...
}
}
}
在你的情况下,你会有像
这样的东西Button btn_copiar = (Button) findViewById(R.id.btn_copiar);
btn_copiar.setOnClickListener(new OnClickListener(){
public void onClick (View v) {
try {
asFtp = new asFTP();
if (comprobar_preferencias()){
Log.d(TAG, prefServidor + " " + String.valueOf(prefPuerto) + " " + prefUsuario + " " + prefPass);
asFtp.setOnResultsListener(MainActivity.this); // here I get the eclipse error
asFtp.execute();
编辑:我知道这个例子很粗糙,我只是想说明问题。如果您有任何问题,请告诉我。