【发布时间】:2016-09-22 04:18:54
【问题描述】:
我想在列表中填充来自本地 JSON 文件的一些消息,但它没有在列表中显示任何消息。有人有什么想法可以帮助我吗?
本地 JSON 文件:
{
"events": [
{
"event": "Taste of summer"
},
{
"event": " House Party at Millennium Park"
},
{
"event": " Farmers Markets"
},
{
"event": "Blues Festival Preview Events"
},
{
"event": "Cultural Alliance - Heritage and Fashion: At a Global Crossroad?"
}
]
}
解析 JSON 文件并将其填充到 ListView 中的主要活动:
public class ListtestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listtest);
// Reading json file from assets folder
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open("listev.json")));
String temp;
while ((temp = br.readLine()) != null)
sb.append(temp);
} catch (IOException e) {
e.printStackTrace();
} finally {
if ((br != null)) {
try {
br.close(); // stop reading
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
JSONObject jsonObjMain = new JSONObject(sb.toString());
JSONArray jsonArray = jsonObjMain.getJSONArray("events");
ArrayList<String> messages = new ArrayList<String>();
for (int i = 0; i < jsonArray.length(); i++) {
// Creating JSONObject from JSONArray
JSONObject object = jsonArray.getJSONObject(i);
// String message = object.getString("event");
String message = jsonArray.getString(i);
//I try both but not working!!!
messages.add(message);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListtestActivity.this,
android.R.layout.simple_list_item_1, messages);
ListView list = (ListView) findViewById(R.id.listView);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(ListtestActivity.this, "TEST List View", Toast.LENGTH_SHORT).show();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
带有 ListView 的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.chicago.spice.ListtestActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="events:"
android:id="@+id/eventView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_below="@+id/eventView"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp" />
</RelativeLayout>
谢谢。
【问题讨论】:
-
当您执行
String message = object.getString("event");时会发生什么?确保您在尝试时评论另一个。 -
请确认您确实获得了值数组 - 您可以尝试在
JSONArray jsonArray = jsonObjMain.getJSONArray("events");行之后的 logcat 中显示jsonArray.length()的值。 -
您能告诉我如何检查数组值吗?谢谢
标签: java android json listview