gpt4 book ai didi

java - Intent.putExtra() 不更新其值

转载 作者:行者123 更新时间:2023-12-01 18:47:07 30 4
gpt4 key购买 nike

我的主屏幕小部件中有 3 个按钮。单击后,我想使用一些参数启动我的 Activity (这取决于单击的按钮)。问题是该值始终为 0(应该是 0、1 或 2,具体取决于单击的按钮)。我的代码如下所示:

for (int appWidgetId : appWidgetIds) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple_app_widget);

for(int z=0;z<widget_buttons.length;z++) {
int id = Integer.valueOf(widget_buttons[z]);
if(z<accounts_array.length) {
String[] data_array = accounts_array[z].split("\\,");

Intent intent = new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Log.e(APP_TAG, "## ACCOUNT_ID: "+ data_array[0]);
intent.putExtra("accountID", data_array[0]);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(id, pendingIntent);
views.setTextViewText(id, data_array[1]);
} else {
views.setViewVisibility(id,View.INVISIBLE); //hide button
}
}

appWidgetManager.updateAppWidget(appWidgetId, views);
}

第一个循环用于更新每个小部件,第二个循环用于注册 3 个按钮上的单击事件。

这就是我在 MainActivity.java 中检索数据的方式

@Override
public void onCreate(Bundle savedInstanceState)
{
// Log.e(APP_TAG, getExtra("accountID"));

super.onCreate(savedInstanceState);

Bundle extras = getIntent().getExtras();

String accountParam = "";
if (extras != null) {
Log.e(APP_TAG, "AccountID in MainActivity: "+extras.getInt("accountID"));
accountParam = "?accountID="+extras.getInt("accountID"); //<---
}

if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}

// Set by <content src="index.html" /> in config.xml
loadUrl("file:///android_asset/www/index.html"+accountParam);
}

你能告诉我为什么每个按钮点击后都会从 extras.getInt() 中得到 0 吗?

最佳答案

您将帐户 ID 作为 String 传递(因为 data 的类型为 String[]),但在 Activity 中 您尝试使用 getInt() 从 extras Bundle 中检索它。

我设置了一个小型示例应用程序,并在 Logcat 中发现了以下几行:

01-21 18:24:02.525 4081-4081/com.example.todolist W/Bundle: Key accountID expected Integer but value was a java.lang.String. The default value 0 was returned.

01-21 18:24:02.525 4081-4081/com.example.todolist W/Bundle: Attempt to cast generated internal exception:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at android.os.BaseBundle.getInt(BaseBundle.java:801) at android.os.BaseBundle.getInt(BaseBundle.java:783) at com.example.todolist.OtherActivity.onCreate(OtherActivity.java:24) at android.app.Activity.performCreate(Activity.java:6237)

因此,在这种情况下,应用程序不会崩溃,但您也将无法检索正确的值。

为了修复您的代码,您应该使用 getString("accountID")

另一件事:您的 PendingIntent 都具有相同的请求代码 (0)。因此,它们将被视为“相同的 PendingIntent”。您必须使用不同的请求代码,否则所有三个 Button 将触发相同的行为。

关于java - Intent.putExtra() 不更新其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59811432/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com