#java #arrays #object #bundle #parcelable
Вопрос:
Я изо всех сил пытаюсь понять, как создать набор объектов массива, а затем записать их в основной набор параметров с помощью Bundle.putParcelableArray.
НАПРИМЕР, Массив:
[{«item_id»:25,»item_name»:»Album»,»price»:»15.00″,»item_brand»:»»,»item_category»:»Music»,»item_list_name»:»Общий продукт List»,»index»:1},{«item_id»:17,»item_name»:»Beanie»,»price»:»18.00″,»item_brand»:»»,»item_category»:»Accessories»,»item_list_name»:»Общий список товаров»,»индекс»:2},{«идентификатор товара»:34,»имя товара»:»Шапочка с логотипом»,»цена»:»18.00″,»бренд товара»:»»,»Категория товара»:»Аксессуары»,»Имя списка товаров»:»Общий список товаров»,»индекс»:3},{«идентификатор товара»:18,»имя товара»:»Пояс»,»цена»:»55.00″,»item_brand»:»»,»item_category»:»аксессуары»,»item_list_name»:»Общие сведения о продукте List»,»index»:4},{«item_id»:19,»item_name»:»Cap»,»price»:»16.00″,»item_brand»:»»,»item_category»:»Accessories»,»item_list_name»:»Общие сведения о продукте List»,»index»:5},{«item_id»:14,»item_name»:»Hoodie»,»price»:»42.00″,»item_brand»:»»,»item_category»:»Hoodies»,»item_list_name»:»общий список продуктов»,»индекс»:6},{«item_id»:15,»item_name»:»толстовку с логотипом»,»цена»:»45.00″,»item_brand»:»»,»item_category»:»толстовки»,»item_list_name»:»общий список продуктов»,»индекс»:7}]
Мне нужно иметь возможность создавать новый пакет для каждой итерации и хранить эти пакеты в новом разборном экземпляре []. Затем поместите этот экземпляр в пакет params с помощью putParcelableArray
Вот что у нас пока получилось:
package com.example.ecommerceapp;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.JavascriptInterface;
import androidx.collection.SparseArrayCompat;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
// [START analytics_web_interface]
public class AnalyticsWebInterface {
public static final String TAG = "AnalyticsWebInterface";
private FirebaseAnalytics mAnalytics;
public AnalyticsWebInterface(Context context) {
mAnalytics = FirebaseAnalytics.getInstance(context);
}
@JavascriptInterface
public void logEvent(String name, String jsonParams) {
LOGD("logEvent:" name);
Log.w(TAG, "jsonReceived: " jsonParams);
mAnalytics.logEvent(name, bundleFromJson(jsonParams));
}
@JavascriptInterface
public void setUserProperty(String name, String value) {
LOGD("setUserProperty:" name);
mAnalytics.setUserProperty(name, value);
}
private void LOGD(String message) {
// Only log on debug builds, for privacy
if (BuildConfig.DEBUG) {
Log.d(TAG, message);
}
}
private Bundle bundleFromJson(String json) {
// [START_EXCLUDE]
if (TextUtils.isEmpty(json)) {
return new Bundle();
}
Log.w(TAG, "Bundlefromjson: " json);
Bundle result = new Bundle();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i ) {
Log.w(TAG, "jsonarray index: " i);
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.w(TAG, "jsonObject: " jsonObject);
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
Object value = jsonObject.get(key);
if (value instanceof String) {
result.putString(key, (String) value);
} else if (value instanceof Integer) {
result.putInt(key, (Integer) value);
} else if (value instanceof Double) {
result.putDouble(key, (Double) value);
} else {
Log.w(TAG, "Value for key " key " not one of [String, Integer, Double]");
}
}
}
} catch (JSONException e) {
Log.w(TAG, "Failed to parse JSON, returning empty Bundle.", e);
return new Bundle();
}
return resu<
// [END_EXCLUDE]
}
}
Я недостаточно разбираюсь в java, чтобы закончить это.
Спасибо