Я хочу получить значения массива пользователей, вызвав API

#java #android

#java #Android

Вопрос:

Я хочу получить список массивов пользователей. У меня есть три класса POGO, т.е. Root(родительский класс), ContactFamilyDetails(дочерний класс), DataModelFamilyDetails (класс внуков).

Проблема, с которой я сталкивался все время, заключается в том, что при запуске приложения в то время я получаю только первое значение массива, к сожалению, я не получил остальные значения. Итак, я собираюсь поделиться всем своим кодом, поэтому, пожалуйста, просмотрите его и помогите мне в этом!! Спасибо!!

AddUserActivity (действует как MainActivity)

 public class AddUserActivity extends AppCompatActivity {

    SharedPreferences prefs;
    String FirstName;
    String ContactNo,Authentication,ID;
    FloatingActionButton FAB;
    private DataModelFamilyDetails dataModelFamDetails;
    ArrayList<DataModelFamilyDetails> dataModelFamilyDetails;
    RecyclerViewAdapter adapter;
    RecyclerView myrv;
    Context context;

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

       // Initialize FloatingAction button
        FAB=findViewById(R.id.fab_id);

        //SharedPreference Login details
        prefs = this.getSharedPreferences("logindata", MODE_PRIVATE);
        FirstName = prefs.getString("fname", "");
        ContactNo = prefs.getString("contact_no1", "");
        Authentication=prefs.getString("Authentication","");
        ID=prefs.getString("id","");


        //Setting RecyclerView
        myrv = findViewById(R.id.recyclerview_id);
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(AddUserActivity.this);
        myrv.setLayoutManager(mLayoutManager);

        dataModelFamilyDetails=new ArrayList<DataModelFamilyDetails>();

        //Set Click listener on Floating Action Button
        FAB.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view) {

                Intent intent=new Intent(AddUserActivity.this,AddNewUserActivity.class);
                startActivity(intent);
            }
        });


//Call the Retrofit Class data

 getResult1();

    }





    //Fetching Family Details using Retrofit

private void getResult1()
    {
        RequestBody requestBody=new FormBody.Builder()
                .add("id",ID)
                .add("Authentication",Authentication)
                .build();


        //Below, API call by a Retrofit Class to the java Interface
        try
        {
            Retrofit_Class.getDefault().apiInterface().getFamilyDetails(requestBody).enqueue(new Callback<Root<ContactFamilyDetails>>()
            {
                @Override
                public void onResponse(Call<Root<ContactFamilyDetails>> call, retrofit2.Response<Root<ContactFamilyDetails>> response)
                {
                    ContactFamilyDetails contactFamilyDetails=response.body().getRoot();
                    String Status=contactFamilyDetails.getStatus();
                    if(Status.equals("true"))
                    {

                        dataModelFamilyDetails=contactFamilyDetails.getData();
                        myrv.setAdapter(new RecyclerViewAdapter(getApplicationContext(),dataModelFamilyDetails));



                    RecyclerViewAdapter(getApplicationContext(),dataModelFamilyDetails);

                    }else
                    {
                        Toast.makeText(context, "You haven't added any family member yet !!", Toast.LENGTH_LONG).show();
                    }

                }

                @Override
                public void onFailure(Call<Root<ContactFamilyDetails>> call, Throwable t)
                {
                    Log.d("Error",t.getMessage());
                    Toast.makeText(context, "Error fetching data", Toast.LENGTH_SHORT).show();
                }
            });
        }catch (Exception e)
        {
            Log.d("Error",e.getMessage());
            Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
        }
    }

}
  

Класс RecyclerViewAdapter

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>{

    ArrayList<DataModelFamilyDetails> dataModelFamilyDetails=new ArrayList<DataModelFamilyDetails>();
    Context mContext;


    public RecyclerViewAdapter(Context mContext, ArrayList<DataModelFamilyDetails> dataModelFamilyDetails) {

        this.mContext=mContext;
        this.dataModelFamilyDetails=dataModelFamilyDetails;
    }

    //3 Implemented methods of RecyclerView.Adapter
    @NonNull
    @Override
    public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
    {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_user_details, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder( RecyclerViewAdapter.MyViewHolder holder, int position) 
    {
        holder.Name.setText(dataModelFamilyDetails.get(position).getName());
        holder.Contact.setText(dataModelFamilyDetails.get(position).getContact_no());
    }

    @Override
    public int getItemCount() 
    {
        return dataModelFamilyDetails.size();
    }


    //Inner Class of RecyclerViewAdapter
    public static class MyViewHolder extends RecyclerView.ViewHolder
    {

        TextView Name,Download,Contact;
        ImageView DeleteDustbin,Call;
        CardView cardView;
        public MyViewHolder(View itemView) {

            super(itemView);

            //Initialize the variables
            Name=itemView.findViewById(R.id.tv1_id);
            Download=itemView.findViewById(R.id.tv2_id);
            Contact=itemView.findViewById(R.id.tv_contact_id);
            cardView=itemView.findViewById(R.id.cardview_id);
            DeleteDustbin=itemView.findViewById(R.id.delete_img_id);
            Call=itemView.findViewById(R.id.call_img_id);
        }
    }
}
  

Root (класс POGO (родительский класс))

 public class Root<T> {

    private T root;

    public T getRoot()

    {
        return root;
    }
}
  

ContactFamilyDetails (POGO Class(Child class))

 public class ContactFamilyDetails {

    @SerializedName("status")
    private String Status;

    @SerializedName("message")
    private String Message;

    @SerializedName("data")
    private ArrayList<DataModelFamilyDetails> data;

    public String getStatus() {
        return Status;
    }

    public String getMessage() {
        return Message;
    }

    public ArrayList<DataModelFamilyDetails> getData() {
        return data;
    }
}
  

DataModelFamilyDetails (POGO Class (GrandChild class))

 public class DataModelFamilyDetails {

    @SerializedName("id")
    private String id;

    @SerializedName("parentId")
    private String parentId;

    @SerializedName("name")
    private String name;

    @SerializedName("age")
    private String age;

    @SerializedName("sex")
    private String sex;

    @SerializedName("relation")
    private String relation;

    @SerializedName("contact_no")
    private String contact_no;

    @SerializedName("email")
    private String email;

    @SerializedName("description")
    private String description;

    @SerializedName("status")
    private String status;

    @SerializedName("image")
    private String image;

    @SerializedName("regDateTime")
    private String regDateTime;

    public DataModelFamilyDetails(String name, String contact_no) {
        this.name = name;
        this.contact_no = contact_no;

    }


    public String getId() {
        return id;
    }

    public String getParentId() {
        return parentId;
    }

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

    public String getRelation() {
        return relation;
    }

    public String getContact_no() {
        return contact_no;
    }

    public String getEmail() {
        return email;
    }

    public String getDescription() {
        return description;
    }

    public String getStatus() {
        return status;
    }

    public String getImage() {
        return image;
    }

    public String getRegDateTime() {
        return regDateTime;
    }
}
  

Модифицированный класс

 public class Retrofit_Class {
    //set an Url here
    public static final String API_BASE_URL = "http://www.hawktechnologies.in/society-management/appservices/";
    //Create a reference of the class here
    private static Retrofit_Class mInstance;
    //Object creation of Retrofit.builder
    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(Retrofit_Class.getDefault().getGsonParser()));

    private ApiInterface apiInterface;
    private OkHttpClient okHttpClient;
    private Gson gson;

    //Constructor
    private Retrofit_Class() {
        //No External Instances
    }

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(Retrofit_Class.getDefault().getOkHttpClient()).build();
        return retrofit.create(serviceClass);
    }

    //Retrofit class method
    public static Retrofit_Class getDefault() {
        if (mInstance == null) {
            mInstance = new Retrofit_Class();
        }
        return mInstance;
    }
    //Interface class method
    public ApiInterface apiInterface() {
        if (apiInterface == null) {
            apiInterface = createService(ApiInterface.class);
        }
        return apiInterface;
    }

    //Method type Gson
    public Gson getGsonParser() {
        if (gson == null) {
            gson = new Gson();
        }
        return gson;
    }

    //Use of HTTP
    public OkHttpClient getOkHttpClient() {
        if (okHttpClient == null) {
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
                @Override
                public void log(String message) {
                    Timber.tag("OkHttp").d(message);
                }
            });
            if (BuildConfig.DEBUG) {
                loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            } else {
                loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
            }
            okHttpClient = new OkHttpClient.Builder()
                    .connectTimeout(20, TimeUnit.SECONDS)
                    .readTimeout(20, TimeUnit.SECONDS)
                    .addInterceptor(loggingInterceptor)
                    .build();
        }
        return okHttpClient;
    }

}
  

Интерфейс

 public interface ApiInterface
{

    @POST("user-login.php")
    Call<Root<Contact>> getLogin(@Body RequestBody requestBody);

    @POST("get_familymembers.php")
    Call<Root<ContactFamilyDetails>> getFamilyDetails(@Body RequestBody requestBody);
}
  

Вместо получения 4 результатов я получаю только один, пожалуйста, нажмите на ссылку, чтобы увидеть картинку.
Ссылка на изображение

Комментарии:

1. вы пытались отлаживать и проверять, возвращает ли api правильные значения?

2. Классы POJO упакованы в типизированный модифицированный класс вызова. Чтобы создать класс POJO для каждого ответа, мы можем перейти к jsonschema2pojo.org

3. @KaranMer Да, все значения возвращаются во время отладки.