在Android中使用枚举切换案例

时间:2014-05-28 04:40:33

标签: java android enums

您好我正在创建一个应用程序,我尝试使用enum定义常量并尝试在doInBackGround AsynTask方法的切换情况下访问这些常量但是在那里说我

LOGIN_API_CALL无法解析为变量

public class TeemWurkAsyncTask extends AsyncTask<String, Void, String> {

    private enum WebAPIConstants {
        LOGIN_API_CALL, FORGOT_PASSWORD_API_CALL;
    }

    private ProgressDialog mProgressDialog;
    private Context mContext;
    private TaskCompleteListener taskCompleteListener;
    private int method;

    public TeemWurkAsyncTask(TaskCompleteListener taskCompleteListener, int method) {
        this.taskCompleteListener = taskCompleteListener;
        this.method = method;
    }

    @Override
    protected void onPreExecute() {
        mProgressDialog = new ProgressDialog(mContext);
        mProgressDialog.setTitle(mContext.getString(R.string.app_name));
        mProgressDialog.setMessage(mContext.getString(R.string.please_wait));
        mProgressDialog.setProgressStyle(mProgressDialog.STYLE_SPINNER);
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {

        switch(method) {
            case LOGIN_API_CALL:  <---- Here getting an error "LOGIN_API_CALL cannot be resolved to a variable"

        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
    }

}

请帮助我,并提前致谢。

3 个答案:

答案 0 :(得分:1)

您有几个问题:methodint,而不是枚举类型,您需要指定WebAPIConstants.LOGIN_API_CALL

此外,以这种方式使用开关几乎总是错误的事情;在任何可行的情况下,使用多态而不是大的开关块。在这种特定情况下,doInBackground确实不属于TeemWurkAsyncTask,它属于正在执行的任务,您应该使用Runnable或编写自己的类似界面doInBackground调用的内容。

答案 1 :(得分:0)

它不知道LOGIN_API_CALL是什么,因为它包含在枚举WEBAPIConstants中。这就是为什么你需要像这样访问它

case WebAPIConstants.LOGIN_API_CALL:

答案 2 :(得分:0)

您无法将int与WebAPIConstants进行比较。

尝试使用以下代码:

private WebAPIConstants method;
public TeemWurkAsyncTask(TaskCompleteListener taskCompleteListener, WebAPIConstants method) {
    this.taskCompleteListener = taskCompleteListener;
    this.method = method;
}  

并使用:

case WebAPIConstants.LOGIN_API_CALL: