如何在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 中通过单击按钮来重复数组上的元素
如何在 Python 中通过我自己的 GUI 应用程序创建 linux 用户?