为什么我没有在另一个活动中获得传递值?

时间:2016-05-03 10:47:00

标签: java android android-intent null

我使用intent.putExtras发送值,但我在下一个活动中获取空值。这是我的意图代码

if (id == R.id.save_times) {
        Intent intent = new Intent(AlertTimerSelector.this, Dashboard.class);
        intent.putExtra(AppHelper.LOW_LEVEL, dialogHelper.getPicker_value1());
        Log.d("AlertTimer", "onOptionsItemSelected: " + dialogHelper.getPicker_value1());
        intent.putExtra(AppHelper.MEDIUM_LEVEL, dialogHelper.getPicker_value2());
        Log.d("AlertTimer", "onOptionsItemSelected: " + dialogHelper.getPicker_value2());
        intent.putExtra(AppHelper.HIGH_LEVEL, dialogHelper.getPicker_value3());
        Log.d("AlertTimer", "onOptionsItemSelected: " + dialogHelper.getPicker_value3());
        intent.putExtra(AppHelper.ALERT_TIME_ID_TEXT,AppHelper.ALERT_TIME_ID);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
        finish();
        return true;
    }

这是我的下一个活动代码,我在onNewIntent

中检索这些值
@Override
protected void onNewIntent(Intent intent) {

    Bundle bundle=getIntent().getExtras();
    if (bundle.getString(AppHelper.ALERT_TIME_ID_TEXT).equals(AppHelper.ALERT_TIME_ID)){
        low_level_time=bundle.getString(AppHelper.LOW_LEVEL);
        medium_level_time=bundle.getString(AppHelper.MEDIUM_LEVEL);
        high_level_time=bundle.getString(AppHelper.HIGH_LEVEL);
    }
    if (bundle.get(AppHelper.SLEEP_TIME_ID_TEXT).equals(AppHelper.SLEEP_ID)){
        sleep_time_hrs=bundle.getString(AppHelper.SLEEP_TIME_HOURS);
        sleep_time_mins=bundle.getString(AppHelper.SLEEP_TIME_MINUTES);
        wakeup_time_hrs=bundle.getString(AppHelper.WAKEUP_TIME_HOURS);
        wakeup_time_mins=bundle.getString(AppHelper.WAKEUP_TIME_MINUTES);
    }
    Log.d(TAG, "onNewIntent: "+bundle.toString());
    super.onNewIntent(intent);
}

请帮我解决这个问题。谢谢

onNewIntent没有被调用。我不知道为什么?

5 个答案:

答案 0 :(得分:1)

首先,使用getIntent()方法获取已开始活动的意图:

Intent intent = getIntent();

如果您的额外数据表示为字符串,则可以使用intent.getStringExtra(String name)方法。在你的情况下:

String id = intent.getStringExtra(AppHelper.LOW_LEVEL);

答案 1 :(得分:0)

试试这个:

 Intent intent=getIntent();
 if(intent!=null)
  {
    low_level_time=intent.getStringExtra(AppHelper.LOW_LEVEL);
     //other values like above..

  }

答案 2 :(得分:0)

您必须以int qsort_strcmp(const void* a, const void* b) { return strcmp(*(const char**)(a), *(const char**)(b)); } // ... qsort(environ, sz, sizeof(char*), qsort_strcmp); 方式获取您的数据,例如

onCreate
当您尝试启动启动模式等于String myString = getIntent().getStringExtra(AppHelper.LOW_LEVEL); (或以编程方式设置)的相同活动时,会调用

OnNewIntent

了解更多信息read this doc

答案 3 :(得分:0)

只有在调用 FLAG_ACTIVITY_SINGLE_TOP 时才会调用

onNewIntent()。由于您在活动中使用3个标志,因此可能存在一些问题。仅使用 FLAG_ACTIVITY_SINGLE_TOP 并尝试。

将检索代码的值移至 onCreate 并尝试。

答案 4 :(得分:0)

您接收意图的活动,在该活动下的清单文件中添加标记

 android:launchMode="singleTop"