java - 如何在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;
}}
解决方案
在这里你已经定义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
}
推荐阅读
- javascript - 阻止自动对焦跨域子帧中的元素
- c++ - QT 在 Linux RHEL 7 上的小部件上使用透明背景
- arduino - 测量 0-10V 模拟信号有什么意义?(Arduino、ESP32、ESP8266 和 ADS1115)
- parsing - ANTLR 条件词法分析器
- flutter - BottomNavigationBar 无法应用背景图片 - Flutter
- typescript - 修复 TypeScript monorepo 中错误的自动导入
- vue.js - Capacitor / Ionic / Vue 本地通知事件监听器
- python - 多显示器设置 pyautogui 上的屏幕截图
- vue.js - PhpStorm + vue.js 格式
- ios - 如何修复 XCode 11.7 错误不支持的 iOS 13.6?