仅当在 Android 中单击按钮后条件为真时才启动 Activity

Posted

技术标签:

【中文标题】仅当在 Android 中单击按钮后条件为真时才启动 Activity【英文标题】:Start Activity only if a condition is true after a button click in Android 【发布时间】:2017-08-01 14:26:12 【问题描述】:

我有三个活动和两个 AsynTask。

    活动 1 - 转到 AsyncTask1 活动 2 - 转到 AsyncTask2 活动 3 - 不需要 AsyncTask

我有一个持续多次动态定义的用户选择向导。我成功地能够跟踪该计数。流下。

为了便于解释,我们将计数保持为 3。

Activity 1 - Activity 首次加载,Count 设置为 1。用户进行选择并单击按钮。这会将用户带到活动 2。

我去Activity 2的方式如下。

我加载了从数据库中提取数据的 AsyncTask。在外部 AsyncTask 文件中,我在 PostExecute 上加载下一个活动。

活动 2 - 用户进行选择并单击按钮。该按钮检查 Count 是否为 1,将其设置为 2。由于计数仍小于 3,因此使用 AsyncTask 返回到 Activity 1。

进程继续,一旦 Count 达到 3,我想去 Activity 3。现在需要在没有任何 AsyncTask 的情况下加载 Activity 3。怎么做?下面是代码。

ImageButton imgButton = (ImageButton) findViewById(R.id.imageButton);
imgButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            //code that I process and define value_i_am_taking_forward_successfully. It is working fine.

            proceedNext();
        
);

private void proceedNext() 
    if (my_counter > max_count) 
        //This is not working. I want to start Activity3 here.
        Intent intent = new Intent(ctx, Activity3.class);

        ctx.startActivity(intent);
    
    else 
        //This works fine. 
        String requested_method = value_i_am_taking_forward_successfully;

        LoadAsyncTask2 loadAsyncTask2 = new LoadAsyncTask2(this);
        loadAsyncTask2.execute(requested_method);
    

下面是加载 Activity 的 AsyncTask 中的代码。 result 来自 doInBackground

@Override
protected void onPostExecute(String result) 
    Intent intent = new Intent(ctx, Activity1.class);

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    intent.putExtra("value_to_take_forward",result);

    ctx.startActivity(intent);

有人可以帮忙吗?

以下是我得到的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

【问题讨论】:

使用你的类名而不是ctx 成功了!请将其作为答案发布,以便我接受。 【参考方案1】:

使用您当前的 ClassName 而不是 ctx

来源:android.content.Context.getPackageName()' on a null object reference

【讨论】:

【参考方案2】:

如果此代码在UI 线程和Activity 本身中运行,那么您应该使用它,

Intent intent = new Intent(this, Activity3.class);
startActivity(intent);

您应该使用Activity 上下文来加载下一个活动。

【讨论】:

【参考方案3】:

max_count 的值是多少?

试试my_counter >= max_count

【讨论】:

问题不在于计数器。它工作得很好。只是Activity 3没有加载。 作为参考,我提到 max_count 为 3。 我可以通过检查计数器进入“if”的正确条件。问题是一旦 my_count 和 max_count 相等,活动就不会加载。我已经添加了它在我的问题中引发的错误。

以上是关于仅当在 Android 中单击按钮后条件为真时才启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章

仅当一个条件为真时才用于 ON DUPLICATE KEY UPDATE 的 Terser 语法?

如何执行条件转场

Javascript:<script src=jquery...仅当条件为真时

MongoDB $and 仅当 $and 在文档的同一数组索引中为真时才查询 - 特别是对于双重嵌套数组 [重复]

R:仅当同一列中的两行中的值为真时才将值添加到 [row,column]

根据状态变量进行条件 Yup 验证