安卓:将JSON数据加载到适配器中

4
这可能是我遇到的一个简单的Java问题,但我希望社区能在这里帮助我,因为我在这种情况下遇到了瓶颈。
我成功地从MySQL数据库中获取数据,并通过JSON传递到应用程序中。在解析期间,我尝试创建另一个数组,以便传递给ArrayAdapter,以在ListView中使用。以下是我遇到问题的代码:
 try{

       jArray = new JSONArray(result);
       JSONObject json_data=null;

           for(int i=0;i<jArray.length();i++){
              json_data = jArray.getJSONObject(i);
              ct_id=json_data.getString("ID");
              ct_name=json_data.getString("Player2N");

              Games game_data[] = new Games[]
              {
                new Games(ct_id, ct_name)     
              };

           }

           GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, game_data);

           listView1 = (ListView)findViewById(R.id.listView1);

           View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
           listView1.addHeaderView(header);
           listView1.setAdapter(adapter);
 }    

这行代码:GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, game_data);

更具体地说,game_data 在 Eclipse 中被标为红色。 我想知道的是为什么循环结束后 game_data 就无法访问了? 我只是试图将 JSON 中的特定字段添加到适配器中的行中。

我还尝试通过设置数组来遍历循环,但是新的 Games[] 会出错。 这是一个例子:

   Games game_data[] = new Games[]
                       {
                        for(int i=0;i<jArray.length();i++){
                         json_data = jArray.getJSONObject(i);
                         ct_id=json_data.getString("ID");
                          ct_name=json_data.getString("Player2N");

//                  Games game_data[] = new Games[]
  //                {
                    new Games(ct_id, ct_name);    
    //              };

               }

错误:变量必须提供维度表达式或数组初始化程序。

3个回答

1
我觉得游戏是你的POJO类,所以你可以像这样做:
创建一个POJO类的列表
private List<Games> games= new ArrayList<Games>();

现在您可以在游戏列表中添加您的内容。

              for(int i=0;i<jArray.length();i++){
                  json_data = jArray.getJSONObject(i);
                  ct_id=json_data.getString("ID");
                  ct_name=json_data.getString("Player2N");
                  games.add(new Games(ct_id, ct_name));
              }

最后将列表传递给适配器。
GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, games);

Lalit,谢谢你的帮助,这让我解决了我正在处理的另一个问题。 - Dustin
此外,您应该勾选最终为您工作的答案,以便未来的用户可以从这个答案中受益。 - Lalit Poptani

1
希望这可以帮助到您...
try{

   jArray = new JSONArray(result);
   JSONObject json_data=null;
   Games game_data[];
   game_data[] = new Games[jArray.length()];
       for(int i=0;i<jArray.length();i++){
          json_data = jArray.getJSONObject(i);
          ct_id=json_data.getString("ID");
          ct_name=json_data.getString("Player2N");

          game_data[i] = new Games(ct_id, ct_name);


       }

       GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, game_data);

       listView1 = (ListView)findViewById(R.id.listView1);

       View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
       listView1.addHeaderView(header);
       listView1.setAdapter(adapter);

}


Umesh,这个程序完美地工作了(稍作调整)。我刚刚移除了: Games game_data[];然后在下一行的最前面添加了 "Games"。非常感谢! - Dustin
嗨,达斯汀,很高兴我能帮到你。如果你觉得这个答案对你有帮助,请考虑将其标记为已回答,以便其他用户可以轻松找到解决方案。它是答案左侧的一个勾号。 - Umesh

0

错误:变量必须提供维度表达式或数组初始化器。

=> 这个错误很明显,因为您没有定义任何维度值来创建一个数组,也没有传递任何初始化到这个数组。

所以我认为您做错了,应该像这样做:

Games game_data[] = new Games(ct_id, ct_name);

这是调用构造函数的正确方式。

我不知道您在游戏类中编写了什么,所以我只提到了构造函数的调用。


Paresh,我仍然在努力使用它,但我找到了简单的解决方案,所以感谢你的帮助! - Dustin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接