У меня есть такой URL
http://182.72.198.001:8080/MyLogin/login/xxxxxx/yyyyyy
userName : xxxxxx
password : yyyyyy
Я использую модификацию, чтобы получить ответ по указанному выше URL-адресу, но он возвращает значение null, мой класс модернизации
public class ApiClient {
public static Retrofit retrofit = null;
public static Retrofit getApiCLient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder().baseUrl("http://182.72.198.001:8080/MyLogin/").addConverterFactory
(GsonConverterFactory.create()).build();
}
return retrofit;
}
}
а класс myInterface -
public interface MyInterface {
@GET("login/")
Call<ResponseBody> LoginValidation(@Query("userName") String username, @Query("password") String password);
}
Мой основной класс
MyInterface loginInterface;
loginInterface = ApiClient.getApiCLient().create(MyInterface.class);
private void LoginUser()
{
final String usedrname = username1.getText().toString();
final String password = password1.getText().toString();
Call<ResponseBody> call = loginInterface.LoginValidation(usedrname,password);
Log.i("Tag","Interface" + usedrname+password);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.i("Tag","Respose" + response.body()); // this body returns null
Toast.makeText(getApplicationContext(), "Thank You!", Toast.LENGTH_SHORT).show();
editor.putString("username",usedrname);
editor.putString("password",password);
editor.putBoolean("isLoginKey",true);
editor.commit();
Intent i=new Intent(MainActivity.this,Navigation.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(getApplicationContext(),"Username or password Mismatch",Toast.LENGTH_LONG).show();
}
});
}
Как я могу решить эту проблему, если я сделал что-то не так в этом коде?
http://182.72.198.001:8080/MyLogin/login/xxxxxx/yyyyyy
Если вам нужно сформировать указанный выше URL-адрес, вам необходимо отправить имя пользователя и пароль в URL-адресе. Итак, ваш интерфейс Retrofit должен выглядеть так:
public interface MyInterface {
@GET("login/{userName}/{password}")
Call<ResponseBody> LoginValidation(@Path("userName") String username,
@Path("password") String password);
}
если вы хотите response как json string, позвоните response.body().string()
всегда его перенаправление на другую страницу, если я даю неправильное имя пользователя и пароль
С использованием
@GET("login/")
Call<ResponseBody> LoginValidation(@Query("userName") String username, @Query("password") String password);
Ваш URL станет: http://182.72.198.001:8080/MyLogin/login/?userName=xxxxxx&password=yyyyyy
Для точного звонка по мере необходимости используйте это (как ответил @Avijit Karmakar)
public interface MyInterface {
@GET("login/{userName}/{password}")
Call<ResponseBody> LoginValidation(@Path("userName") String username,
@Path("password") String password);
}
Используя этот метод, вы получите именно тот результат, который хотите.
Я пробовал это, также он возвращал этот khttp3.ResponseBody$1@3febf20
debug вы вызываете и оцениваете call.request. Он покажет вам, ваш запрос API
Я пробовал это, также он возвращал этот khttp3.ResponseBody$1@3febf20