Java 使用JSONObject创建有序数组
让我解释一下我的问题。 (我是java新手,所以这类事情可能很简单,但我无法理解!) 我有一个JSONObject,它看起来像:Java 使用JSONObject创建有序数组,java,android,arrays,json,Java,Android,Arrays,Json,让我解释一下我的问题。 (我是java新手,所以这类事情可能很简单,但我无法理解!) 我有一个JSONObject,它看起来像: { notes:[ { "scolaryear":2013, "codemodule":"B-CPE-042", "titlemodule":"B1 - Unix & C Lab Seminar", "codeinstance":"NCE-1-
{
notes:[
{
"scolaryear":2013,
"codemodule":"B-CPE-042",
"titlemodule":"B1 - Unix & C Lab Seminar",
"codeinstance":"NCE-1-1",
"codeacti":"acti-134315",
"title":"Piscine Jour 1",
"date":"2013-10-04 13:33:51",
"correcteur":"ramassage-tek",
"final_note":0,
"comment":"Ex_00 -> output differs"
},
{} // And so on ..
]
}
目前,我可以通过以下方式获取所有数据:
try {
// Pulling items from the array
JSONArray notesArr = jsonObject.getJSONArray("notes");
try {
ListView lv = (ListView) _modulesActivity.findViewById(R.id.listView);
List < String > notesList = new ArrayList < String > ();
for (int i = 0; i < notesArr.length(); i++) {
JSONObject tmp = notesArr.getJSONObject(i);
String code_module = tmp.getString("codemodule");
String module = tmp.getString("titlemodule");
String title = tmp.getString("title");
String final_note = tmp.getString("final_note");
String year = tmp.getString("scolaryear");
String comment = tmp.getString("comment");
String display = year + " | " + title + " | " + final_note;
notesList.add(display);
}
ArrayAdapter < String > arrayAdapter = new ArrayAdapter < String > (
_mainContext, android.R.layout.simple_list_item_1, notesList);
lv.setAdapter(arrayAdapter);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(_mainContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(_mainContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
第一个标题是年份,单击年份时,可以看到所有模块:
> MODULE #1
> MODULE #2
...
当您单击一个模块时,您可以看到所有项目:
> PROJECT #1 | MARK : 20
> PROJECT #2 | MARK : 13
...
最后,当你点击一个项目时,你可以看到评论
^ PROJECT #1 | MARK : 20
- Great project .. bla bla bla
(如果可能,也可以显示包含注释的弹出窗口)
我知道这可能是一件复杂的事情,但我真的很想做到这一点
提前感谢您的帮助 我认为你有两种可能性:
List<Note> notesList = new ArrayList<Note>();
for (int i = 0; i < notesArr.length(); i++) {
JSONObject tmp = notesArr.getJSONObject(i);
noteListe.add(new Note(tmp.getString("codemodule"), tmp.getString("titlemodule"),...);
}
List notesList=new ArrayList();
对于(int i=0;i
现在用适当的方法对它进行排序,最后打印它,可能会覆盖toString()Note方法希望它能帮助你所以我找到了解决办法 我使用了这个图书馆: 这是我的密码:
try {
// Pulling items from the array
TreeNode root = TreeNode.root();
TreeNode child;
String year = "YEAR";
String moduleName = "";
YearHolder.IconTreeItem nodeItem = new YearHolder.IconTreeItem(1, year);
ModuleHolder.IconTreeItem nodeModule = new ModuleHolder.IconTreeItem(1, moduleName);
TreeNode parent = new TreeNode(nodeItem).setViewHolder(new YearHolder(_mainContext));
TreeNode parentModule = new TreeNode(nodeModule).setViewHolder(new ModuleHolder(_mainContext));
JSONArray modArr = jsonObject.getJSONArray("notes");
try {
for (int i = 0; i < modArr.length(); i++) {
JSONObject tmp = modArr.getJSONObject(i);
/*String title = tmp.getString("title");*/
String final_note = tmp.getString("final_note");
String newModuleName = tmp.getString("titlemodule");
String newYear = tmp.getString("scolaryear");
if (!(newYear.equals(year))) {
year = newYear;
nodeItem = new YearHolder.IconTreeItem(1, year);
parent = new TreeNode(nodeItem).setViewHolder(new YearHolder(_mainContext));
root.addChild(parent);
}
if (!(newModuleName.equals(moduleName))) {
moduleName = newModuleName;
nodeModule = new ModuleHolder.IconTreeItem(1, moduleName);
parentModule = new TreeNode(nodeModule).setViewHolder(new ModuleHolder(_mainContext));
parent.addChild(parentModule);
}
NoteHolder.IconTreeItem nodeNote = new NoteHolder.IconTreeItem(1, final_note);
child = new TreeNode(nodeNote).setViewHolder(new NoteHolder(_mainContext));
parentModule.addChildren(child);
/*String display = year + " | " + title + " | " + final_note;*/
}
AndroidTreeView tView = new AndroidTreeView(_notesActivity, root);
_notesActivity.setContentView(tView.getView());
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(_mainContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(_mainContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
试试看{
//从阵列中提取项目
TreeNode root=TreeNode.root();
树状幼体;
字符串year=“year”;
字符串moduleName=“”;
YearHolder.IconTreeItem nodeItem=新的YearHolder.IconTreeItem(1,年);
ModuleHolder.IconTreeItem nodeModule=新的ModuleHolder.IconTreeItem(1,moduleName);
TreeNode父节点=新的TreeNode(nodeItem).setViewHolder(new YearHolder(_mainContext));
TreeNode parentModule=new TreeNode(nodeModule).setViewHolder(new ModuleHolder(_mainContext));
JSONArray modArr=jsonObject.getJSONArray(“注释”);
试一试{
对于(int i=0;i
YearHolder类如下所示:
public class YearHolder extends TreeNode.BaseNodeViewHolder<YearHolder.IconTreeItem> {
public YearHolder (Context context ) {
super(context);
}
@Override
public View createNodeView(TreeNode node, IconTreeItem value) {
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.custom_notes_view, null, false);
TextView tvValue = (TextView) view.findViewById(R.id.text_title);
tvValue.setText(value.text);
return view;
}
public static class IconTreeItem {
public int icon;
public String text;
IconTreeItem(int icon_, String text_) {
this.icon = icon_;
this.text = text_;
}
}
}
public class YearHolder扩展TreeNode.basenodeviewwholder{
公众年度持有人(背景){
超级(上下文);
}
@凌驾
公共视图createNodeView(TreeNode节点,IconTreeItem值){
最终LayoutFlater充气机=LayoutFlater.from(上下文);
最终视图=充气机。充气(R.layout.custom\u notes\u视图,null,false);
TextView tvValue=(TextView)view.findViewById(R.id.text\u title);
tvValue.setText(value.text);
返回视图;
}
公共静态类IContreItem{
公共int图标;
公共字符串文本;
IconTreeItem(整数图标、字符串文本){
this.icon=icon;
this.text=text_u2;;
}
}
}
超级容易使用!您需要根据需要实现和自定义它。您可以做的是从字符串中获取日期,并将其存储在注释对象格式中(选择您的格式,如yyyy MM dd)然后使用Comparator按日期对列表中的对象进行比较,默认情况下,它将按升序对日期进行排序。您希望在listview的列表项中显示什么?请在此处输入内容。是的,而不是使用字符串列表使用Notes对象列表,然后在Notes对象上从列表中实现Comparetor,它将对您的问题进行排序。
public class YearHolder extends TreeNode.BaseNodeViewHolder<YearHolder.IconTreeItem> {
public YearHolder (Context context ) {
super(context);
}
@Override
public View createNodeView(TreeNode node, IconTreeItem value) {
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.custom_notes_view, null, false);
TextView tvValue = (TextView) view.findViewById(R.id.text_title);
tvValue.setText(value.text);
return view;
}
public static class IconTreeItem {
public int icon;
public String text;
IconTreeItem(int icon_, String text_) {
this.icon = icon_;
this.text = text_;
}
}
}