首页 > 解决方案 > android的json对象的while循环或for循环不起作用

问题描述

我正在尝试为方法 getuserDetailWhileLoop(); 添加一个 for 循环或 while 循环;但我很难弄清楚该怎么做。此代码假设向文本视图显示 json 对象,并且文本视图中有滚动视图。但是,当我运行代码时,while 循环不起作用,只显示 1 个对象。我需要 while 循环来显示多个对象。我将如何做到这一点?谢谢。

package com.demo.myblog.profile;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.demo.myblog.R;
import com.demo.myblog.volley.VolleySingleton;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class UserProfile extends AppCompatActivity {
    private String ID,NAME,EMAIL,CREATED_DATE, ID2;
    private String appURl, appURl2;
    Activity mContext = this;
    TextView mId,mName,mEmail,mDate, mid2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile2);

        mId = findViewById(R.id.txt_Id);
        mid2 = findViewById(R.id.textView5);
        mName = findViewById(R.id.txt_Name);
        mEmail = findViewById(R.id.txt_Email);
        mDate = findViewById(R.id.txt_Data);


        Intent data = getIntent();
        EMAIL = data.getStringExtra("email");
        appURl = "url here";
        appURl2 = "url2 here";

        getUserDetail();

        getuserDetailWhileLoop();

    }


    private void getuserDetailWhileLoop()

    {
        if (EMAIL.isEmpty()){
            AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
            alert.setMessage("Email cannot be empty");
            alert.setCancelable(false);
            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            alert.show();
        }
        else{
            StringRequest stringRequest = new StringRequest(Request.Method.GET,appURl2, new Response.Listener<String>()

            {
                @Override
                public void onResponse(String response) {
                    try
                    {
                        JSONObject jo = new JSONObject( response );

                        for(int i =0 ;i < jo.length(); i++)
                        {


                            ID2 = jo.getString( "id" );
                            //NAME = jsonObject.getString("username");
                            //EMAIL = jsonObject.getString("user_email");
                            //CREATED_DATE = jsonObject.getString("created_date");



                            //sonObject = jsonObject.getJSONObject( "id" );
                            mid2.setText( ID2 );

                            //mName.setText(NAME);
                            //mEmail.setText(EMAIL);
                            //mDate.setText(CREATED_DATE);
                        }

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

           }

标签: androidloopswhile-loop

解决方案


我喜欢使用 for 循环而不是 while 循环,因为使用 for 循环可以检查循环的进度。

在这种情况下,最好使用 for 循环,就像您已经做过的那样。您可以发布 StringRequest 的示例响应吗?

[编辑]

您忘记添加计数器“i”,您的 for 循环很好。

JSONObject obj = jo.getJSONObject(i);
obj.getString("id");

我认为这是解决您问题的方法。


推荐阅读