我有一个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)
答案 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)
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”)){