首页 > 解决方案 > 如何在android studio中通过带有密码的POST方法获取JSON数据

问题描述

我需要使用 POST 方法获取基于 SECRET CODE 的 json 数据响应,请您解决我的问题,提前谢谢。

我一直面临着许多问题,使用这种密码的 POST 方法来获取 JSON 响应

 public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.listViewHeroes);


    getQuestions();
}

private void getQuestions() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ApiInterface.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
            .build();

    ApiInterface api = retrofit.create(ApiInterface.class);

    RequestModel requestModel = new RequestModel();
    requestModel.setSecretCode("341977082");

    Call<List<ModelObjects>> call = api.getQuestions();

   call.enqueue(new Callback<List<ModelObjects>>() {
       @Override
       public void onResponse(Call<List<ModelObjects>> call, Response<List<ModelObjects>> response) {
           List<ModelObjects> questionsList = response.body();


           String[] questions = new String[questionsList.size()];


           for (int i = 0; i < questionsList.size(); i++) {
               questions[i] = questionsList.get(i).getQues_No();
           }



           listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, questions));
       }

       @Override
       public void onFailure(Call<List<ModelObjects>> call, Throwable t) {
           Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
       }
   });}}

这是界面,我在其中传递包含父级和扩展名的 URL

public interface ApiInterface {

String BASE_URL = "";

@POST("QuestionsList")
Call<List<ModelObjects>> getQuestions();}

这是响应模型

 public class ModelObjects {
@SerializedName("Ques_No")
private String Ques_No;

public ModelObjects(String ques_No) {
    Ques_No = ques_No;
}

public String getQues_No() {
    return Ques_No;
}

public void setQues_No(String ques_No) {
    Ques_No = ques_No;
}}

这是请求模型

 public class RequestModel {
private String SecretCode;

public RequestModel(String secretCode) {
    SecretCode = secretCode;
}

public RequestModel() {

}

public String getSecretCode() {
    return SecretCode;
}

public void setSecretCode(String secretCode) {
    SecretCode = secretCode;
}}

标签: javaandroidjsonpostretrofit

解决方案


在这里你已经定义RequestModel了,但你没有将它传递给 api 调用。发布请求应该有正文。因此@Body,在定义 api 调用时指定如下。

@POST("QuestionsList")
Call<List<ModelObjects>> getQuestions(@Body RequestModel model);

然后在调用getQuestion()模型时传递。

RequestModel requestModel = new RequestModel();
requestModel.setSecretCode("341977082");
Call<List<ModelObjects>> call = api.getQuestions(requestModel);

更新:更新您ModelObject的如下。

public class ModelObjects {
@SerializedName("Ques_No")
String Ques_No;
@SerializedName("Question")
String Ques;
@SerializedName("Answer")
String answer;
//same for other params as well
}

推荐阅读