监听器出错(尝试从asynctask返回一个带接口的值)

时间:2014-03-21 21:18:46

标签: java android android-asynctask

我想从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();

感谢。

1 个答案:

答案 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();
编辑:我知道这个例子很粗糙,我只是想说明问题。如果您有任何问题,请告诉我。