下面列出了android.util.JsonWriter#beginArray ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static String listToJsonStr(final List<Object> list) {
if (list == null || list.isEmpty()) {
return EMPTY_STRING;
}
final StringWriter sw = new StringWriter();
final JsonWriter writer = new JsonWriter(sw);
try {
writer.beginArray();
for (final Object o : list) {
writer.beginObject();
if (o instanceof Integer) {
writer.name(INTEGER_CLASS_NAME).value((Integer)o);
} else if (o instanceof String) {
writer.name(STRING_CLASS_NAME).value((String)o);
}
writer.endObject();
}
writer.endArray();
return sw.toString();
} catch (final IOException e) {
} finally {
close(writer);
}
return EMPTY_STRING;
}
@TypeConverter
public static String fromStringSet(Set<String> strings) {
if (strings==null) {
return(null);
}
StringWriter result=new StringWriter();
JsonWriter json=new JsonWriter(result);
try {
json.beginArray();
for (String s : strings) {
json.value(s);
}
json.endArray();
json.close();
}
catch (IOException e) {
Log.e(TAG, "Exception creating JSON", e);
}
return(result.toString());
}
public static String listToJsonStr(final List<Object> list) {
if (list == null || list.isEmpty()) {
return EMPTY_STRING;
}
final StringWriter sw = new StringWriter();
final JsonWriter writer = new JsonWriter(sw);
try {
writer.beginArray();
for (final Object o : list) {
writer.beginObject();
if (o instanceof Integer) {
writer.name(INTEGER_CLASS_NAME).value((Integer)o);
} else if (o instanceof String) {
writer.name(STRING_CLASS_NAME).value((String)o);
}
writer.endObject();
}
writer.endArray();
return sw.toString();
} catch (final IOException e) {
} finally {
close(writer);
}
return EMPTY_STRING;
}
public static void save(Context context, String filename, ArrayList<Session> sessions) {
try {
FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
JsonWriter writer = new JsonWriter(new OutputStreamWriter(fos, "UTF-8"));
writer.setIndent(" ");
writer.beginArray();
for (Session s : sessions) {
s.toJSON(writer);
}
writer.endArray();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String listToJsonStr(final List<Object> list) {
if (list == null || list.isEmpty()) {
return EMPTY_STRING;
}
final StringWriter sw = new StringWriter();
final JsonWriter writer = new JsonWriter(sw);
try {
writer.beginArray();
for (final Object o : list) {
writer.beginObject();
if (o instanceof Integer) {
writer.name(INTEGER_CLASS_NAME).value((Integer)o);
} else if (o instanceof String) {
writer.name(STRING_CLASS_NAME).value((String)o);
}
writer.endObject();
}
writer.endArray();
return sw.toString();
} catch (final IOException e) {
} finally {
close(writer);
}
return EMPTY_STRING;
}
private void toJsonTags(JsonWriter writer)throws IOException{
writer.name("tags");
writer.beginArray();
for(Tag t:getTags().getAllTagsSet())
t.writeJson(writer);
writer.endArray();
}
private void snapshotViewHierarchy(JsonWriter j, View rootView)
throws IOException {
reset();
j.beginArray();
snapshotView(j, rootView, 0);
j.endArray();
}
private static String serializeModifiers(Collection<PaymentDetailsModifier> modifiers) {
StringWriter stringWriter = new StringWriter();
JsonWriter json = new JsonWriter(stringWriter);
try {
json.beginArray();
for (PaymentDetailsModifier modifier : modifiers) {
serializeModifier(modifier, json);
}
json.endArray();
} catch (IOException e) {
return EMPTY_JSON_DATA;
}
return stringWriter.toString();
}
void writeMatchedSubstringsArray(JsonWriter writer, List<MatchedSubstring> matchedSubstrings) throws IOException {
writer.beginArray();
for (MatchedSubstring matchedSubstring : matchedSubstrings) {
writer.beginObject();
writer.name("length").value(matchedSubstring.length);
writer.name("offset").value(matchedSubstring.offset);
writer.endObject();
}
writer.endArray();
}
void writeDescriptionTermsArray(JsonWriter writer, List<DescriptionTerm> descriptionTerms) throws IOException {
writer.beginArray();
for (DescriptionTerm term : descriptionTerms) {
writer.beginObject();
writer.name("offset").value(term.offset);
writer.name("value").value(term.value);
writer.endObject();
}
writer.endArray();
}
void writePlaceTypesArray(JsonWriter writer, List<PlaceType> placeTypes) throws IOException {
writer.beginArray();
for (PlaceType type : placeTypes) {
switch (type) {
case ROUTE:
writer.value("route");
break;
case GEOCODE:
writer.value("geocode");
break;
}
}
writer.endArray();
}
private void snapshotViewHierarchy(JsonWriter j, View rootView) throws IOException {
j.beginArray();
snapshotView(j, rootView);
j.endArray();
}
@SuppressWarnings("deprecation")
private void addProperties(JsonWriter j, View v) throws IOException {
final Class<?> viewClass = v.getClass();
boolean processable = true;
for (final PropertyDescription desc : mProperties) {
if (desc.targetClass.isAssignableFrom(viewClass) && null != desc.accessor) {
final Object value = desc.accessor.applyMethod(v);
if (processable) {
if (!TextUtils.isEmpty(desc.name)) {
if ("clickable".equals(desc.name)) {
boolean isClickable = (Boolean) value;
if (!isClickable || v instanceof AbsListView || v instanceof AbsoluteLayout) {
processable = false;
}
} else if ("alpha".equals(desc.name)) {
float alpha = (Float) value;
// 透明度是0则不可见
if (alpha == 0) {
processable = false;
}
} else if ("hidden".equals(desc.name)) {
int hide = (Integer) value;
// hidden是0则隐藏
if (hide != 0) {
processable = false;
}
}
}
}
j.name("processable").value(processable ? "1" : "0");
if (null == value) {
// Don't produce anything in this case
} else if (value instanceof Number) {
j.name(desc.name).value((Number) value);
} else if (value instanceof Boolean) {
j.name(desc.name).value((Boolean) value);
} else if (value instanceof ColorStateList) {
j.name(desc.name).value((Integer) ((ColorStateList) value).getDefaultColor());
} else if (value instanceof Drawable) {
final Drawable drawable = (Drawable) value;
final Rect bounds = drawable.getBounds();
j.name(desc.name);
j.beginObject();
j.name("classes");
j.beginArray();
Class<?> klass = drawable.getClass();
while (klass != Object.class) {
j.value(klass.getCanonicalName());
klass = klass.getSuperclass();
}
j.endArray();
j.name("dimensions");
j.beginObject();
j.name("left").value(bounds.left);
j.name("right").value(bounds.right);
j.name("top").value(bounds.top);
j.name("bottom").value(bounds.bottom);
j.endObject();
if (drawable instanceof ColorDrawable) {
final ColorDrawable colorDrawable = (ColorDrawable) drawable;
j.name("color").value(colorDrawable.getColor());
}
j.endObject();
} else {
j.name(desc.name).value(value.toString());
}
}
}
}
private void addProperties(JsonWriter j, View v)
throws IOException {
final Class<?> viewClass = v.getClass();
for (final PropertyDescription desc : mProperties) {
if (desc.targetClass.isAssignableFrom(viewClass) && null != desc.accessor) {
final Object value = desc.accessor.applyMethod(v);
if (null == value) {
// Don't produce anything in this case
} else if (value instanceof Number) {
j.name(desc.name).value((Number) value);
} else if (value instanceof Boolean) {
boolean clickable = (boolean) value;
if (TextUtils.equals("clickable", desc.name)) {
if (VisualUtil.isSupportClick(v)) {
clickable = true;
} else if (VisualUtil.isForbiddenClick(v)) {
clickable = false;
}
}
j.name(desc.name).value(clickable);
} else if (value instanceof ColorStateList) {
j.name(desc.name).value((Integer) ((ColorStateList) value).getDefaultColor());
} else if (value instanceof Drawable) {
final Drawable drawable = (Drawable) value;
final Rect bounds = drawable.getBounds();
j.name(desc.name);
j.beginObject();
j.name("classes");
j.beginArray();
Class klass = drawable.getClass();
while (klass != Object.class) {
j.value(klass.getCanonicalName());
klass = klass.getSuperclass();
}
j.endArray();
j.name("dimensions");
j.beginObject();
j.name("left").value(bounds.left);
j.name("right").value(bounds.right);
j.name("top").value(bounds.top);
j.name("bottom").value(bounds.bottom);
j.endObject();
if (drawable instanceof ColorDrawable) {
final ColorDrawable colorDrawable = (ColorDrawable) drawable;
j.name("color").value(colorDrawable.getColor());
}
j.endObject();
} else {
j.name(desc.name).value(value.toString());
}
}
}
}
private void mergeWebViewNodes(JsonWriter j, WebNode view, View webView, float webViewScale) {
try {
j.beginObject();
j.name("hashCode").value(view.getId());
j.name("index").value(0);
if (!TextUtils.isEmpty(view.get$element_selector())) {
j.name("element_selector").value(view.get$element_selector());
}
if (!TextUtils.isEmpty(view.get$element_content())) {
j.name("element_content").value(view.get$element_content());
}
j.name("element_level").value(++mSnapInfo.elementLevel);
j.name("h5_title").value(view.get$title());
float scale = view.getScale();
if (webViewScale == 0) {
webViewScale = scale;
}
// 原生 WebView getScrollX 能取到值,而 X5WebView 始终是 0
float left = 0f, top = 0f;
if (webView.getScrollX() == 0) {
left = view.getLeft() * webViewScale;
} else {
left = (view.getLeft() + view.getScrollX()) * webViewScale;
}
if (webView.getScrollY() == 0) {
top = view.getTop() * webViewScale;
} else {
top = (view.getTop() + view.getScrollY()) * webViewScale;
}
j.name("left").value((int) left);
j.name("top").value((int) top);
j.name("width").value((int) (view.getWidth() * webViewScale));
j.name("height").value((int) (view.getHeight() * webViewScale));
j.name("scrollX").value(0);
j.name("scrollY").value(0);
j.name("visibility").value(view.isVisibility() ? View.VISIBLE : View.GONE);
j.name("url").value(view.get$url());
j.name("clickable").value(true);
j.name("importantForAccessibility").value(true);
j.name("is_h5").value(true);
j.name("classes");
j.beginArray();
j.value(view.getTagName());
Class<?> klass = webView.getClass();
do {
j.value(klass.getCanonicalName());
klass = klass.getSuperclass();
} while (klass != Object.class && klass != null);
j.endArray();
List<String> list = view.getSubelements();
if (list != null && list.size() > 0) {
j.name("subviews");
j.beginArray();
for (String id : list) {
j.value(id);
}
j.endArray();
}
j.endObject();
} catch (IOException e) {
SALog.printStackTrace(e);
}
}
private static void viewHierarchySnapshot(JsonWriter j, View rootView, ViewSnapshotConfig snapshotConfig) throws IOException {
j.beginArray();
viewSnapshot(j, rootView, snapshotConfig);
j.endArray();
}
private static void writeViewProperties(JsonWriter j, View v, ViewSnapshotConfig snapshotConfig) throws IOException {
final Class<?> viewClass = v.getClass();
for (final ViewProperty desc : snapshotConfig.propertyDescriptionList) {
if (desc.target.isAssignableFrom(viewClass) && null != desc.accessor) {
final Object value = desc.accessor.invokeMethod(v);
//noinspection StatementWithEmptyBody
if (null == value) {
// no-op
} else if (value instanceof Boolean) {
j.name(desc.name).value((Boolean) value);
} else if (value instanceof Number) {
j.name(desc.name).value((Number) value);
} else if (value instanceof ColorStateList) {
j.name(desc.name).value((Integer) ((ColorStateList) value).getDefaultColor());
} else if (value instanceof Drawable) {
final Drawable drawable = (Drawable) value;
final Rect bounds = drawable.getBounds();
j.name(desc.name);
j.beginObject();
j.name("classes");
j.beginArray();
Class klass = drawable.getClass();
while (klass != Object.class) {
if (klass != null) {
j.value(klass.getCanonicalName());
klass = klass.getSuperclass();
}
}
j.endArray();
j.name("dimensions");
j.beginObject();
j.name("left").value(bounds.left);
j.name("right").value(bounds.right);
j.name("top").value(bounds.top);
j.name("bottom").value(bounds.bottom);
j.endObject();
if (drawable instanceof ColorDrawable) {
final ColorDrawable colorDrawable = (ColorDrawable) drawable;
j.name("color").value(colorDrawable.getColor());
}
j.endObject();
} else {
j.name(desc.name).value(value.toString());
}
}
}
}
public ConfEncoder2() throws IOException {
mBuffer = new StringWriter();
mWriter = new JsonWriter(mBuffer);
mWriter.beginArray();
}