如何通过接口将类传递给AsyncTask?

时间:2018-07-11 15:28:26

标签: java android inheritance mobile android-asynctask

我在体系结构方面有一个小问题。

我创建了一个名为BaseActivity.java的抽象Activity类。 在此活动中,我放置了业务逻辑登录呼叫等。

这是基本的BaseActivity代码:

abstract class BaseActivity extends AppCompatActivity implements BaseActivityInterface {

      protected ApiParameters apiParameters;
      private BaseActivityInterface calledActivity;

      protected void getLoggedUser(BaseActivityInterface calledActivity) {
                this.calledActivity = calledActivity;
                GetLoggedUserTask getLoggedUserTask = new GetLoggedUserTask(this.apiParameters, BaseActivity.this);
                getLoggedUserTask.execute(Utility.LOGIN_URL);
      }

      @Override
      public void updateActivity(JSONObject response) throws JSONException {
          if (response.getInt("status") == HttpURLConnection.HTTP_OK) {
              this.initUserObject(response);
              if (this.calledActivity != null) {
                  this.calledActivity.updateActivity(response);
              }
          } else {
              Toast.makeText(this, response.getString("message"), Toast.LENGTH_LONG).show();
              Intent intent = new Intent(this, LoginActivity.class);
              this.startActivity(intent);
              finish();
          }
     }
}

这是一个名为GetLoggedUserTask的AsyncTask:

public class GetLoggedUserTask extends  AsyncTask<String, BaseActivityInterface, String> {
    private ApiParameters apiParameters;
    private BaseActivityInterface response;

    public GetLoggedUserTask(ApiParameters apiParameters, BaseActivityInterface response) {
        this.apiParameters = apiParameters;
        this.response = response;
    }

这是我的BaseActivity的子类,称为CustomerActivity

public class CustomersActivity extends BaseActivity implements BaseActivityInterface {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.getLoggedUser(CustomersActivity.this);
    }


    @Override
    public void updateActivity(JSONObject loginResult) throws JSONException {
        .....
    }
}

最后是我的界面BaseActivityInterface

public interface BaseActivityInterface extends Serializable {
    void updateActivity(JSONObject loginResult) throws JSONException;
}

流程应为:启动CustomerActivity.java,传递super做getLoggetUser(),然后从super BaseActivity启动AsyncTask。这是热点:

当我通过asyncTask构造“ BaseActivity.this”并进行调试时,GetLoggedUserTask中对“ response”元素的引用被称为子CustomerActivity:

Class reference

我在哪里做错了?

1 个答案:

答案 0 :(得分:0)

没有错。 BaseActivityabstract类,这意味着它不能被实例化。 BaseActivity.this将返回扩展了BaseActivity(在本例中为CustomersActivity)的具体类的实例。您将永远不会将BaseActivity.this作为实例,因为在Java中不可能有抽象类的实例。

相关问题