Android 从匿名类中获取活动 [英] Android get activity from within anonymous class

查看:25
本文介绍了Android 从匿名类中获取活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

总的来说,我是 Android 开发和 Java 的新手.这是基本设置:我有一个带有 AsyncTask 的启动画面,用于检查服务器可用性.在 this 线程之后,我在我的活动中进行了回调.这比在 OnPostExecute() 中做工作更有意义,因为我想在不同的活动中重用这个任务.

I'm super new to Android development and Java in general. Here's the basic setup: I have a splash screen with an AsyncTask to check server availability. Following this thread I made a callback in my activity. This makes more sense than doing the work in OnPostExecute() as I want to reuse this task in different activities.

但是,在我的回调中,我会检查状态是否正常.如果是,它应该启动下一个活动.但是从我的回调上下文来看,我不知道如何获取我的 Activity 引用,我需要将其作为 Intent 的参数.

However, in my callback I do a check if the status is okay. If it is, it should launch the next activity. But from the context of my callback, I don't get how I can get my Activity reference, which I need as a parameter for the Intent.

这是我在 OnCreate 下的 Activity 中的代码:

This is the code in my Activity under OnCreate:

    //Check server status
    CheckServiceTask t = new CheckServiceTask(new OnTaskCompleted<ShaggyServiceStatus>() {
        @Override
        public void onTaskCompleted(ShaggyServiceStatus result) {
            Log.i(TAG, "Callback. Result: " + result.getStatus());
            ProgressBar pb = (ProgressBar) findViewById(R.id.splash_progress);
            pb.setVisibility(View.INVISIBLE);

            if (result.getStatusCode() == 999){
                TextView t = (TextView) findViewById(R.id.splash_status_text);
                t.setText(result.getStatus());
                return;
            }

            Intent i = new Intent(getActivity(), LoginActivity.class);
            startActivity(i);
            finish();

        }
    });

    t.execute();

失败的部分是 getActivity().该呼叫不可用.使用 this 会引发错误(我理解,因为我在 OnTaskCompleted 的上下文中).

The part where this fails is at getActivity(). That call is not available. Using this throws an error (which I understand, as I'm in the context of OnTaskCompleted).

为了完整起见,这是 OnTaskCompleted 的接口:

For completeness, this is the interface for OnTaskCompleted:

public interface OnTaskCompleted<T> {
    public void onTaskCompleted(T result);
}

这是 CheckServiceTask 类:

And this is the CheckServiceTask class:

public class CheckServiceTask extends AsyncTask<Void, Void, ShaggyServiceStatus>{
    private static final String TAG = "coo";

    public OnTaskCompleted<ShaggyServiceStatus> listener;

    public CheckServiceTask (OnTaskCompleted<ShaggyServiceStatus> l){
        this.listener = l;
    }

    @Override
    protected ShaggyServiceStatus doInBackground(Void... params) {
        try {
            Log.i(TAG, "Connecting to server...");
            //TODO: Make this a setting
            final String url = "https://someplace.com/status";
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
            //restTemplate.postForObject("url", bodyObject, ShaggySer.class);
            ShaggyServiceStatus sss = restTemplate.getForObject(url, ShaggyServiceStatus.class);
            Log.d(TAG, "Got the status.");
            return sss;
        } catch (Exception e) {
            //TODO: Exception handling
            Log.e(TAG, e.getMessage(), e);
        }

        //If we're here, it's not okay.
        ShaggyServiceStatus r = new ShaggyServiceStatus("Cannot connect to server", 999, "none");

        return r;
    }

    @Override
    protected void onPostExecute(ShaggyServiceStatus result) {
        super.onPostExecute(result);
        listener.onTaskCompleted(result);
    }
}

推荐答案

Use CurrentClassName.this

Intent i = new Intent(CurrentClassName.this, LoginActivity.class);

getActivity():与 Fragments 一起使用

getActivity(): used with Fragments

返回当前与此片段关联的 Activity.

Return the Activity this fragment is currently associated with.

class.this 与嵌套类时的 this 不同.

class.this isn't the same as this when you have nested class.

这篇关于Android 从匿名类中获取活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆