arrays - 从 PostData 的 JSONObject 获取 JSONArray 时出错
问题描述
我对 jsonobject 有疑问。
此代码发布data
到登录 api 并获取json
对象。然后将 settex 设置为 secondactivity。当我将代码更改为仅getdata
作为json
对象时,我成功地收到了 success 及其值,但是id
, name
, rol
, username
, name
, 等...没有收到。
我发布数据并接收json
对象为:
{
"user": {
"id": 9,
"name": "CCC",
"role": null,
"username": "CCC",
"email": null,
"email_verified_at": null,
"created_at": "2021-02-23T12:29:17.000000Z",
"updated_at": "2021-02-23T12:29:46.000000Z"
},
"success": true
}
还有我MainActivity
的是:
public class MainActivity extends AppCompatActivity {
private String URLline = "https://example.com/api/login/";
private EditText etUname, etPass;
private Button btn;
public static String namesecond, usernamesecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etUname = findViewById(R.id.etusername);
etPass = findViewById(R.id.etpassword);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loginUser();
}
});
}
private void loginUser(){
final String username = etUname.getText().toString().trim();
final String password = etPass.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, URLline,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
parseData(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("username",username);
params.put("password",password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
public void parseData(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.getString("success").equals("true")) {
JSONArray dataArray = jsonObject.getJSONArray("user");
for (int i = 0; i < dataArray.length(); i++) {
JSONObject dataobj = dataArray.getJSONObject(i);
usernamesecond = dataobj.getString("name"); // this is static name on the second activity
namesecond = dataobj.getString("username");// this is static name on the second activity
}
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
控制台运行错误是:
W/System.err: org.json.JSONException: Value {"id":9,"name":"CCC","role":null,"username":"CCC","email":null,"email_verified_at":null,"created_at":"2021-02-23T12:29:17.000000Z","updated_at":"2021-02-23T12:29:46.000000Z"} at user of type org.json.JSONObject cannot be converted to JSONArray
W/System.err: at org.json.JSON.typeMismatch(JSON.java:101)
我认为json
数据有一个数组,我没有得到id
, name
, rol
, username
, 等等...
请帮我解决这个问题。谢谢你。
解决方案
我解决了我的问题并在这里编写了真正的编码:
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.getString("success").equals("true")) {
JSONObject jsonObjectUser= jsonObject.getJSONObject("user");
Iterator x = jsonObjectUser.keys();
JSONArray jsonArray = new JSONArray();
while (x.hasNext()){
String key = (String) x.next();
jsonArray.put(jsonObjectUser.get(key));
}
usernamesecond = dataobj.getString("name"); // this is static name on the second activity
namesecond = dataobj.getString("username");// this is static name on the second activity
}
Intent intent = new Intent(MainActivity.this,HobbyActivity.class);
startActivity(intent);
}
} catch (JSONException e) {
e.printStackTrace();
}
代替
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.getString("success").equals("true")) {
JSONArray dataArray = jsonObject.getJSONArray("user");
for (int i = 0; i < dataArray.length(); i++) {
JSONObject dataobj = dataArray.getJSONObject(i);
usernamesecond = dataobj.getString("name"); // this is static name on the second activity
namesecond = dataobj.getString("username");// this is static name on the second activity
}
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
} catch (JSONException e) {
e.printStackTrace();
推荐阅读
- azure - Azure 操作组不为 Outlook 联系人组发送电子邮件
- powershell - 如何检查用户是否具有管理员权限
- swift - 我不知道我必须做什么才能使(2)工作..迅速
- python - Seaborn 和 Pandas,分组箱线图
- reactjs - 使用 testing-library/react-native 接收号码的测试道具
- kotlin - 如何添加百分比计算器 Kotlin
- python - 如何读取图像而不将其保存在python的当前工作目录中
- java - 在 MapStruct 中使用的自定义设置器
- html - 如何在 SVG 中使用内联 HTML 元素?
- node.js - 这是我的nodemailer程序即使我在TO地址中提供了错误的邮件,它也会显示发送的消息如何纠正