我正在尝试从API那里获取数据,在该API中我必须使用post方法作为初学者,我对改造的post方法没有经验,但是从其他其他StackOverflow问题中我可以完成代码,但是当我把用户名和密码错误400,因为我无法将数据传递到服务器 这是代码
API接口:
public interface APIInterface {
@POST("http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@Body LoginResponse login);
}
APIClient:
class APIClient {
public static final String BASE_URL = "http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
getter-setter:
public class LoginResponse {
@SerializedName("username")
public String UserId;
@SerializedName("FirstName")
public String FirstName;
@SerializedName("LastName")
public String LastName;
@SerializedName("ProfilePicture")
public String ProfilePicture;
@SerializedName("Password")
public String Password;
public LoginResponse(String UserId, String Password) {
this.UserId = UserId;
this.Password = Password;
}
我遇到这样的错误
`Response {protocol = http / 1.1,code = 400,message = Bad Request,url = http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php}'
任何方向我在做什么错都会有帮助 { “ username”:“ test”, “密码”:“ 123456” } 我必须得到的示例输出
{"TABLE_DATA":"{\"data\":[[\"Tiger Nixon\",\"System Architect\",\"Edinburgh\",\"5421\",\"2011\/04\/25\",\"$320,800\"]...
活动方法:
private void loginRetrofit2Api(String userId, String password) {
final LoginResponse login = new LoginResponse(userId, password);
Call<LoginResponse> call1 = apiInterface.createUser(login);
call1.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
Log.e("Login", response.toString());
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Toast.makeText(getApplicationContext(), "onFailure called ", Toast.LENGTH_SHORT).show();
call.cancel();
}
});
}
public boolean checkValidation() {
userId = et_Email.getText().toString();
password = et_Pass.getText().toString();
if (et_Email.getText().toString().trim().equals("")) {
CommonMethod.showAlert("UserId Cannot be left blank", MainActivity.this);
return false;
} else if (et_Pass.getText().toString().trim().equals("")) {
CommonMethod.showAlert("password Cannot be left blank", MainActivity.this);
return false;
}
return true;
}
CommonMethod类:
public static boolean isNetworkAvailable(Context ctx) {
ConnectivityManager connectivityManager
= (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
public static void showAlert(String message, Activity context) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(message).setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
try {
builder.show();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
您在这里做错了几件事。
首先,您需要正确设置基本网址。
public static final String BASE_URL = "http://tvsfit.mytvs.in/"
现在在方法调用中相应地更改路径。您需要设置将在基本URL之后添加的路径。
public interface APIInterface {
@POST("reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@Body LoginResponse login);
}
序列化名称区分大小写,您需要将它们与参数名称完全匹配。
@SerializedName("password") //in sample request you are using password and not Password
public String Password;
答案 1 :(得分:0)
您应该做的是:
public interface APIInterface {
@POST("http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@String userId, @String password);
}
LoginResponse是处理响应的类。因此,尝试进行登录时,将其作为参数传递并没有多大意义。 您将看起来像:
Call<LoginResponse> call1 = apiInterface.createUser(userId, password);
我当然可能是错的,因此请仔细阅读文档以确切了解所有参数。
答案 2 :(得分:0)
您是否在 Postman 上测试了此api,它是否运行良好 当我在邮递员测试此api时。它会显示错误 400 ,并显示错误消息 {“ ErrorDescription”:“必填参数丢失”,“ Error”:400} 。这表示您没有传递以下所有参数该api调用。看到这个截图。 api error screenshot