【发布时间】:2016-02-05 21:08:35
【问题描述】:
我有一个“wholeYearRiskArray”的 ArrayList,在 ArrayList 的每个索引处都有另一个 JSONObjects 的 ArrayList,其中包含每月的新闻/风险。每个指数代表一个月的新闻/风险。
我想在 ListView 中显示每个 JSONObject 的 displaydate 和 subject 属性。
因为每个月的数据都通过索引与其他月的数据分开。
我想在没有任何标签的 ViewPager 中生成片段。每个 Fragment 将保存一个月的每个数据。 Fragments会根据wholeYearRisksArray的大小动态生成。
这是调试模式下的图片。
http://i.imgur.com/3RvqDMn.png
这是我要实现的图片。
http://i.imgur.com/NQdkUXr.png
这是我的 MainActivity.java 代码。
public class MainActivity extends AppCompatActivity {
public static String TAG = MainActivity.class.getSimpleName();
ArrayList<Risks> risksArrayList = new ArrayList<>();
HashMap<String, String> firstObjectHashMap = new HashMap<>();
HashMap<String, String> lastObjectHashMap = new HashMap<>();
String latestDateStr;
String oldestDateStr;
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime formatedLatestDate;
DateTime formatedOldestDate;
DateTime upDate;
JSONArray filteredJSONArray = new JSONArray();
ArrayList<ArrayList<JSONObject>> wholeYearRiskArray = new ArrayList<>();
Risks risks = new Risks();
private String JsonUrl = "https://api.myjson.com/bins/4goeq"; // https://api.myjson.com/bins/4goeq
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest req = new StringRequest(JsonUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjectFromArray = jsonArray.getJSONObject(i);
if (jsonObjectFromArray.getString("publishtype").equals("PUBLISHED")) {
filteredJSONArray.put(jsonObjectFromArray);
risks.setUID(jsonObjectFromArray.getString("UID"));
risks.setSubject(jsonObjectFromArray.getString("subject"));
risks.setArticletext(jsonObjectFromArray.getString("articletext"));
risks.setDisplaydate(jsonObjectFromArray.getString("displaydate"));
risks.setPublishdate(jsonObjectFromArray.getString("publishdate"));
risks.setKeywords(jsonObjectFromArray.getString("keywords"));
risks.setPublishdate(jsonObjectFromArray.getString("publishtype"));
risks.setTimestamp(jsonObjectFromArray.getString("timestamp"));
risksArrayList.add(risks);
}
}
risksArrayList.get(0);
JSONObject firstObjectFromJsonArray = filteredJSONArray.getJSONObject(0);
JSONObject lastObjectFromJsonArray = filteredJSONArray.getJSONObject(filteredJSONArray.length() - 1);
firstObjectHashMap.put("UID", firstObjectFromJsonArray.getString("UID"));
firstObjectHashMap.put("subject", firstObjectFromJsonArray.getString("subject"));
firstObjectHashMap.put("articletext", firstObjectFromJsonArray.getString("articletext"));
firstObjectHashMap.put("displaydate", firstObjectFromJsonArray.getString("displaydate"));
firstObjectHashMap.put("publishdate", firstObjectFromJsonArray.getString("publishdate"));
firstObjectHashMap.put("keywords", firstObjectFromJsonArray.getString("keywords"));
firstObjectHashMap.put("publishtype", firstObjectFromJsonArray.getString("publishtype"));
firstObjectHashMap.put("timestamp", firstObjectFromJsonArray.getString("timestamp"));
lastObjectHashMap.put("UID", lastObjectFromJsonArray.getString("UID"));
lastObjectHashMap.put("subject", lastObjectFromJsonArray.getString("subject"));
lastObjectHashMap.put("articletext", lastObjectFromJsonArray.getString("articletext"));
lastObjectHashMap.put("displaydate", lastObjectFromJsonArray.getString("displaydate"));
lastObjectHashMap.put("publishdate", lastObjectFromJsonArray.getString("publishdate"));
lastObjectHashMap.put("keywords", lastObjectFromJsonArray.getString("keywords"));
lastObjectHashMap.put("publishtype", lastObjectFromJsonArray.getString("publishtype"));
lastObjectHashMap.put("timestamp", lastObjectFromJsonArray.getString("timestamp"));
oldestDateStr = firstObjectHashMap.get("publishdate");
latestDateStr = lastObjectHashMap.get("publishdate");
oldestDateStr = oldestDateStr.substring(0, 10);
oldestDateStr = oldestDateStr + " 00:00:00";
formatedOldestDate = fmt.parseDateTime(oldestDateStr);
formatedLatestDate = fmt.parseDateTime(latestDateStr);
int daysInMonth;
ArrayList<JSONObject> perMonthRisksArray = new ArrayList<JSONObject>();
while (formatedOldestDate.isBefore(formatedLatestDate) || formatedOldestDate.isEqual(formatedLatestDate)) {
daysInMonth = formatedOldestDate.dayOfMonth().getMaximumValue();
upDate = formatedOldestDate.plusDays(daysInMonth - 1);
long formatedLatestDateMillis = formatedOldestDate.getMillis();
long upDateMillis = upDate.getMillis();
perMonthRisksArray = fetchObjectsByDate(filteredJSONArray, formatedLatestDateMillis, upDateMillis);
wholeYearRiskArray.add(perMonthRisksArray);
formatedOldestDate = upDate.plusDays(1);
}
wholeYearRiskArray.get(0);
Log.d(TAG, Integer.toString(wholeYearRiskArray.size()));
risksArrayList.get(0);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
}
}
);
queue.add(req);
}
public ArrayList<JSONObject> fetchObjectsByDate(JSONArray array, long startDate, long endDate) {
final ArrayList<JSONObject> list = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
final JSONObject object = array.optJSONObject(i);
if (object != null) {
final String dateStr = object.optString("publishdate");
if (dateStr != null) {
final long date = fmt.parseDateTime(dateStr).getMillis();
if ((date >= startDate) && (date <= endDate)) {
list.add(object);
}
}
}
}
return list;
}
}
这是我的 Risks.Java 代码。
public class Risks {
String UID;
String subject;
String articletext;
String displaydate;
String publishdate;
String keywords;
String publishtype;
String timestamp;
public String getUID() {
return UID;
}
public void setUID(String UID) {
this.UID = UID;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getDisplaydate() {
return displaydate;
}
public void setDisplaydate(String displaydate) {
this.displaydate = displaydate;
}
public String getArticletext() {
return articletext;
}
public void setArticletext(String articletext) {
this.articletext = articletext;
}
public String getPublishdate() {
return publishdate;
}
public void setPublishdate(String publishdate) {
this.publishdate = publishdate;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
public String getPublishtype() {
return publishtype;
}
public void setPublishtype(String publishtype) {
this.publishtype = publishtype;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
}
我应该使用 ListView 还是 TableLayout 或 LayoutInflator?
如何在没有任何选项卡的情况下动态生成片段并根据上述场景显示数据?
【问题讨论】:
-
你遇到了哪个错误或异常/
-
@ChiragSavsani 我没有收到错误或异常。但我找不到解决此问题的方法。
-
显示我的解决方案。希望对你有帮助。
-
@ChiragSavsani 这是我想向用户展示的图片。 link
-
但您的实际问题是什么?你只有一个数据还是什么都没有?
标签: java android json arraylist android-listview