【发布时间】:2018-09-13 13:11:34
【问题描述】:
我真的非常感谢我能得到的任何帮助!抱歉问了这么长的问题。
我正在创建这个 android 应用,在哪里注册,用户将输入他们的电话号码并提交它,以通过短信获取验证码。
我已经完成了本教程: https://code.tutsplus.com/tutorials/sending-data-with-retrofit-2-http-client-for-android--cms-27845
我已将他们应用程序中的 2 个字段缩减为一个字段 - 一个用于电话号码的文本字段,以及一个下方的提交按钮。此电话号码将发送到 API。
我真的是 Retrofit 的新手,我已经尝试了一段时间来成功发送对 API 的调用。我已经使用“Postman”桌面应用程序测试了 API 调用,并且 API 处于活动状态并做出响应...我只是无法形成发送到 API 的有效请求。
我们的 API 人员设计的 JSON 模式......为此活动只需要一个字符串,电话号码:
{
"phone_number": "string"
}
然后如果它是一个有效的电话号码并且用户不在数据库中,你会得到一个 200 响应
{
"message": "string"
}
或者您可以从 API 返回 400 响应
{
"error": "string",
"description": "string"
}
我的改造接口,称为 APIService.java 如下所示:
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.Body;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface APIService {
@POST("/verifications/signup/send")
@FormUrlEncoded
Call<Post> sendPhoneNumber(@Field("phone_number") String phone_number);
}
我真的是retrofit2的新手,在上面,我能感觉到一个我不知道如何解决的问题。从我得到的 API 模式来看,我发送给 API 的这个参数应该是“body”......而不是“field”。也许在改造@Body ...我不太确定如何在上面的这个java文件中实现它。
现在,我在下面所做的可能真的很愚蠢……我不明白应该如何改造 java 'model' 类。我遵循了一个在 RESPONSE 之后对类建模的教程,而不是数据调用。因此,我修改了他们的 Post 类(我称之为 ?JSON 对象以发送单个电话号码)。所以我的 Post 类看起来像这样:
public class Post {
@SerializedName("message")
@Expose
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
//return "Post{" + "message = " + message + '}';
return "This is a return message string";
}
}
老实说,我认为我所做的可能是完全错误的,但我不确定如何设计 object(Post) 类,因为我什至不知道这个类将用于什么......除了收到回复了吗?
public class MainActivity extends Activity {
private TextView mResponseTv;
private APIService mAPIService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText phoneNumberEt = (EditText)
findViewById(R.id.et_phoneNumber);
Button submitBtn = (Button) findViewById(R.id.btn_submit);
mResponseTv = (TextView) findViewById(R.id.tv_response);
mAPIService = ApiUtils.getAPIService();
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phoneNumber = phoneNumberEt.getText().toString().trim();
if (!TextUtils.isEmpty(phoneNumber)) {
sendPost(phoneNumber);
}
}
});
}
public void sendPost(String phone_number) {
mAPIService.sendPhoneNumber(phone_number).enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
int statusCode = response.code();
if (response.isSuccessful()) {
showResponse("Response code is " + statusCode + ". Submitted successfully to API - " + response.body().toString());
Log.i(TAG, "post submitted to API." + response.body().toString());
}
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
showResponse("Unable to submit post to API.");
Log.e(TAG, "Unable to submit post to API.");
}
});
}
public void showResponse(String response) {
if (mResponseTv.getVisibility() == View.GONE) {
mResponseTv.setVisibility(View.VISIBLE);
}
mResponseTv.setText(response);
}
}
我的其他文件与上面教程链接中的文件非常相似。这就是我修改后的简单文本字段版本。
当我能够得到它以联系 API 并且我可以读取响应时,我会将它合并到我正在开发的真实应用程序中。
目前,该应用程序已编译并在我的手机(以及模拟器)上运行。当我提交电话号码时,提交按钮下方的文本字段没有显示任何应有的消息......所以我确定曾经有问题
mAPIService.sendPhoneNumber(phone_number).enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response)
{
在 MainActivity 中到达。
【问题讨论】:
-
使用可以使用这个站点创建一个模型类进行改造..jsonschema2pojo.org
-
在邮递员中你是发送表单数据还是原始数据
-
在邮递员中我发送 100.60.100.48:8080/api/v1/verifications/signup/send?phone_number=1112223334
标签: java android api post retrofit