我几个小时都在苦苦挣扎,我做错了什么。
我正在尝试使用org.json库解析来自此API的数据。
JSONParser jsonParser = new JSONParser();
JSONObject obj = (JSONObject) jsonParser.parse(getAllCustomers());
JSONArray arr = obj.getJSONArray("data");
for (int i = 0; i < arr.length(); i++) {
String name = arr.getJSONObject(i).getString("name");
}
我甚至不知道我的代码是否正确,但是我得到一个错误,说.getJSONArray()找不到符号,与.getJSONObject相同。
我在这里做错了什么。
JSON:
"data": [
{
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"website_slug": "bitcoin"
},
{
"id": 2,
"name": "Litecoin",
"symbol": "LTC",
"website_slug": "litecoin"
},
{
"id": 3,
"name": "Namecoin",
"symbol": "NMC",
"website_slug": "namecoin"
},
{
"id": 4,
"name": "Terracoin",
"symbol": "TRC",
"website_slug": "terracoin"
},
{
"id": 5,
"name": "Peercoin",
"symbol": "PPC",
"website_slug": "peercoin"
},
{
"id": 6,
"name": "Novacoin",
"symbol": "NVC",
"website_slug": "novacoin"
},
{
"id": 8,
"name": "Feathercoin",
"symbol": "FTC",
"website_slug": "feathercoin"
},
{
"id": 9,
"name": "Mincoin",
"symbol": "MNC",
"website_slug": "mincoin"
},
}
编辑已更改为&#34;帖子&#34;到&#34;数据&#34;。仍然存在上述方法的问题
答案 0 :(得分:1)
您需要这样做,
JSONArray arr = obj.getJSONArray("data");
而不是
JSONArray arr = obj.getJSONArray("posts");
因为,JsonObject的值键为'data'而不是'posts'
答案 1 :(得分:1)
检查1: 如果您正在尝试解析给定的API,那么没有名称为&#34; posts&#34;一点都没!!尝试使用&#34;数据&#34;相反: - )
fragment = null;
fragment = Tab1.newInstance(1,categoryName.get(0));
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.addToBackStack("tab1");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
tabListBuffer.add(tabLayout.getTabAt(0)); //Add the first tab to arrayList
// perform setOnTabSelectedListener event on TabLayout
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabListBuffer.add(tab);
int count=0;
int temp=0;
for (int i = 0; i < tabListBuffer.size(); i++) {
if (tabListBuffer.get(i) == tab) {
temp=i+1;
count++;
}
final int str = temp;
if (count>=2)
tabRepeatPos=str;
}
// get the current selected tab's position and replace the fragment accordingly
fragment = Tab1.newInstance(tab.getPosition(), categoryName.get(tab.getPosition()));
String backStateName = fragment.getClass().getName();
fm = getSupportFragmentManager();
boolean fragmentPopped = fm.popBackStackImmediate();
ft = fm.beginTransaction();
ft.replace(R.id.simpleFrameLayout, fragment);
ft.addToBackStack("tab" + tab.getPosition());
if (fragmentPopped) {
fm.popBackStack("tab"+tabRepeatPos, 0);
fm.executePendingTransactions();
}
ft.commit();
}
检查2: 你说,即使使用&#34;数据&#34;你仍然有错误。 在这种情况下,请查看getAllCustomers()返回的内容。它是否返回有效的json字符串??
检查3: 如果getAllCustomers()返回有效的JSON,它是否包含&#34;数据&#34;元件?如果是,那是一个数组吗?