我可以解析json并用listview列出它。
我想从json中删除两个相同的元素,我只想列出一个。
代码:
public class MainActivity extends AppCompatActivity {
ArrayList<Product> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList = new ArrayList<>();
runOnUiThread(new Runnable() {
@Override
public void run() {
new ReadJSON().execute(url);
}
});
}
class ReadJSON extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
return readURL(params[0]);
}
@Override
protected void onPostExecute(String content) {
try {
JSONObject jsonObject = new JSONObject(content);
JSONArray jsonArray = jsonObject.getJSONArray("School");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
JSONArray server = c.getJSONArray("Names");
for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);
arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
NewtAdapter adapter = new NewtAdapter(
getApplicationContext(), R.layout.list, arrayList
);
ListView listview = (ListView) findViewById(R.id.listView);
listview.setAdapter(adapter);
}
}
}
json文件:
{
"School":[
{
"Names":[
{"id":"1", "name":"John"},
{"id":"2", "name":"Amanda"},
{"id":"3", "name":"Robert"},
{"id":"4", "name":"Jackie"},
{"id":"5", "name":"Palma"},
{"id":"1", "name":"Walcott"}
]
}
]
}
输出:
1 - 约翰
2 - 阿曼达
3 - 罗伯特
4 - 杰基
5 - 帕尔马
1 - 沃尔科特
我想删除相同的ID,只想列出一个。
输出应该是这样的:
1 - 约翰
2 - 阿曼达
3 - 罗伯特
4 - 杰基
5 - 帕尔马
我该怎么做?
谢谢。
答案 0 :(得分:1)
假设您的Product类有一个getId()方法,请修改您的代码:
for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);
arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}
到此:
for(int j=0; j<server.length(); j++){
JSONObject serverObject = server.getJSONObject(j);
boolean alreadyInList = false;
for (Product p : arrayList) {
if (p.getId().equals(serverObject.getString("id")))
alreadyInList = true;
}
if (!alreadyInList)
arrayList.add(new Product(
serverObject.getString("id"),
serverObject.getString("name")
));
}
基本上,在列表中添加新项目之前,请检查是否已存在具有相同ID的内容。
答案 1 :(得分:0)
尝试
export default class MyComponent extends React.Component {
constructor(props) {
super(props)
}
componentWillReceiveProps(nextProps) {
if (nextProps.invalid) {
throw new Error('invalid')
}
}
render() {
return (
<div/>
)
}
}