当前位置: 首页 > 面试题库 >

Android从匿名类中获取活动

徐子石
2023-03-14
问题内容

我对Android开发和Java超级陌生。这是基本设置:我有一个初始屏幕,带有AsyncTask来检查服务器的可用性。在此线程之后,我在活动中进行了回调。这比进行工作更有意义,OnPostExecute()因为我想在不同的活动中重用此任务。

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

这是我在Activity中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)。

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

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

这是CheckServiceTask类:

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);
    }
}

问题答案:

CurrentClassName.this

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

getActivity():与片段一起使用

返回此片段当前与之关联的活动。

class.thisthis嵌套类不同。



 类似资料:
  • 我的目标是从arraylist创建menuitem,然后向每个menuitem添加一个事件,该事件在ArrayList中搜索所选的menuitem,以便它可以转移到下一个场景。菜单项将位于菜单按钮内。 我遇到的问题是如何从菜单项中提取文本。我如何引用这些匿名菜单项的文本?

  • 问题内容: 我正在尝试从PreferenceActivity启动新的活动。但是,它失败并显示为“无法找到显式活动类。您是否在AndroidManifest.xml中声明了该活动?” 好吧,是的,我宣布: AlarmSettings是我的PreferenceActivity。AlarmSettings通过以下方式调用FlashLightActivity: 这是FlashLightActivity:

  • 在以下片段中: 有没有办法从内部匿名类引用匿名类的外部实例? 第二个错误是在解决方案上,我在这里找到了一个匿名内部类的外部类的关键字。这些问题似乎共享一些概念和问题空间,但性质不同。

  • 下面是我的示例类,我希望通过在这行中使用反射来获取y和z字段(Field[]fields=forName.getDeclaredFields();)我得到了空数组。如果y和z不是类结构的一部分,那么它们属于哪一部分

  • 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有

  • 我以为我对自己正在做的事情有很好的把握,但每当我觉得我对某事有很好的把握时,我被证明是错的:) 当我不在匿名类中时,我可以简单地执行 有人能解释为什么我可以调用方法,但不能在intent参数中使用吗?