添加项

时间:2016-01-30 12:04:23

标签: android json arraylist

我有一个arraylist,我用来存储json解析的值。但是在向arraylist添加值后,它显示它的大小为1.我已经在下面添加了我的代码.pls帮我解决这个问题

public void completed(JSONObject jsonObject) {


        login_data = new ArrayList<Login_modal>();


        try {
            String response=jsonObject.toString();
            JSONObject result = new JSONObject(response);
            JSONObject res = result.getJSONObject(RES);
            String stat = res.getString(STAT);
            String username = res.getString(USERNAME);
            String useremail = res.getString(USEREMAIL);
            String userId = res.getString(USERID);
            String userAvatarFile = res.getString(USERAVATARFILE);
            String userType = res.getString(USERTYPE);
            String authID = res.getString(AUTHID);
            String cntr = res.getString(CNTR);
            String loggedInOnce = res.getString(LOGGEDINONCE);
            String topicarn = res.getString(TOPICARN);

            Login_modal login_details = new Login_modal(stat, username, useremail, userId, userAvatarFile, userType, authID, cntr, loggedInOnce, topicarn);

            login_details.setStat(STAT);
            login_details.setUsername(USERNAME);
            login_details.setUseremail(USEREMAIL);
            login_details.setUserId(USERID);
            login_details.setUserAvatarFile(USERAVATARFILE);
            login_details.setUserType(USERTYPE);
            login_details.setAuthID(AUTHID);
            login_details.setCntr(CNTR);
            login_details.setLoggedInOnce(LOGGEDINONCE);
            login_details.setTopicarn(TOPICARN);

            login_data.add(login_details);


        } catch (JSONException e) {
            e.printStackTrace();
        }

这是我的json文件

{
  "res": {
    "stat": "SUCCESS",
    "username": "Aggie",
    "useremail": "aggie@logicalsteps.net",
    "userId": "u55e29ddfe7cbd",
    "userAvatarFile": "",
    "userType": "SUB",
    "authID": "",
    "cntr": "",
    "loggedInOnce": "",
    "topicarn": "arn:aws:sns:us-east-1:080141827424:Demogroup"
  }
}

这里我得到了arraylist

 if(login_data.get(1).equals("SUCCESS")) {

                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(intent);
                }

                else {
                    Toast.makeText(Login.this, "Login failed try again", Toast.LENGTH_SHORT).show();
                }

错误日志

FATAL EXCEPTION: main
                                                                                   java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
                                                                                       at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
                                                                                       at java.util.ArrayList.get(ArrayList.java:304)

4 个答案:

答案 0 :(得分:1)

你做错了。正确的方法是

 if(login_data.get(0).getStat().equals("SUCCESS"))

您的login_data只有1条记录,因此您可以通过get(0) 0:index(第一个元素)

获得此记录
login_data.get(0) ---->  return Login_modal at 0 position

login_data.get(0).getStat() ----> return Stat of  Login_modal at 0 position

答案 1 :(得分:0)

Arraylist index从0开始,你使用的是login_data.get(1),而arraylist大小只有1

if(login_data.get(0).equals("SUCCESS")) {

                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(intent);
                }

                else {
                    Toast.makeText(Login.this, "Login failed try again", Toast.LENGTH_SHORT).show();
                }

你的JSON响应键是小写的,但是你正在使用UPPER case

例如,你应该像这样解析其余部分:

 String stat = res.getString("stat");

您已经创建了构造函数,并且您再次使用setter方法。我假设你在LOGIN_MODEL构造函数中设置每个变量。 评论这些行

            login_details.setStat(STAT);
            login_details.setUsername(USERNAME);
            login_details.setUseremail(USEREMAIL);
            login_details.setUserId(USERID);
            login_details.setUserAvatarFile(USERAVATARFILE);
            login_details.setUserType(USERTYPE);
            login_details.setAuthID(AUTHID);
            login_details.setCntr(CNTR);
            login_details.setLoggedInOnce(LOGGEDINONCE);
            login_details.setTopicarn(TOPICARN);

答案 2 :(得分:0)

普通人的拼写错误。您正在传递arrayList

中的json密钥
login_details.setStat(STAT);

应该是

login_details.setStat(stat);

因为您在[{1}}中存储的值不在stat中,STAT是您的JSON密钥。

还有一点,你的arraylist只有1条记录,而不是STAT你需要使用login_data.get(1)

login_data.get(0)

答案 3 :(得分:0)

您只添加了一个数据。

login_data.add(login_details);

以下内容不是向列表中添加数据  login_details.setStat(STAT);  login_details.setUsername(用户名); ... 您正在设置Login_modal模式实例login_details的属性值。

然后将一个Login_modal实例添加到login_data。 所以你最终会得到一个。

这里你得到异常(索引越界),因为你正在访问login_data的第二个(索引1;第一个是索引0)元素,它不存在。  if(login_data.get(1).equals(“SUCCESS”)){