如何在android studio中通过带有密码的POST方法获取JSON数据

Posted

技术标签:

【中文标题】如何在android studio中通过带有密码的POST方法获取JSON数据【英文标题】:How to get JSON data by POST method with Secret code in android studio 【发布时间】:2020-09-20 23:49:44 【问题描述】:

我需要使用 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;

【问题讨论】:

这将是 JSON [ "Ques_No": 1, "Question": "Linnaeus system of classification is ", "Option1": "Natural", "Option2": "Artificial", " Option3": "Phylogenetic", "Option4": "Progressive", "Answer": "Artificial", "Secret_Code": null , "Ques_No": 2, "Question": "分类的基本单位是", "Option1": "genus", "Option2": "Species", "Option3": "Variety", "Option4": "subspeices", "Answer": "Species", "Secret_Code": null ] 【参考方案1】:

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

@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

【讨论】:

感谢您的宝贵回复,我按照您的建议做了。它已连接,但我如何访问第一个问题,请告诉我 您无法获得响应列表的任何值?请详细说明您的问题。 是的,我无法访问任何值,但连接成功,其代码为 200 根据 JSON 响应,您的响应对象有多个值,但我可以看到您只是解析了一个值,即 Ques_No。对于其他数据,您需要先解析它们。检查我更新的答案。 如果我先得到一个值,那么我将访问所有的 json 对象。请告诉我如何访问第一个 json 对象【参考方案2】:

我能看到什么,您正在创建 RequestModel 类的对象,但您没有将它传递到任何地方。如果您想将 secretCode 与 post 网络调用一起发送,那么您必须将此 requestModel 实例传递给调用。

    public interface ApiInterface 
    String BASE_URL = "";
    @POST("QuestionsList")
    Call<List<ModelObjects>> getQuestions(@Body RequestModel requestModel);
    

然后你可以调用这个方法,并可以通过这个 requestModel 对象传递

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

如果你想访问第一个对象,你可以这样做

   List<ModelObjects> questionsList = response.body();
   ModelObject obj = questionList.get(0);
   String question = obj.getQues_No();

这个问题将是第一个问题。

【讨论】:

悉达多谢谢你的回复,我写了你回复的代码,请告诉我如何访问第一个对象 你想访问响应列表中的第一个对象吗? 是的,悉达多,我需要

以上是关于如何在android studio中通过带有密码的POST方法获取JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2019 中通过单击按钮来重复数组上的元素

Android studio关于界面跳转问题

如何在WebElement中通过xpath查找子元素

如何在 Python 中通过我自己的 GUI 应用程序创建 linux 用户?

如何在 Xcode 或 Android Studio 中无线测试应用程序?

在 Android 的 OKhttp 中通过 POST 请求发送 JSON 正文