0
這裏不同接口的型號是我的API終點:使用改造後,在回調和身體
http://192.168.1.22:8000/api/auth/login
我需要POST
email
和password
從服務器接收Token
Server後響應:
{
"status": "ok",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHA6XC9cL21vbmV5bWF0Y2guYXBwOjgwMDBcL2FwaVwvYXV0aFwvbG9naW4iLCJpYXQiOjE0OTE0OTYzNDEsImV4cCI6MTQ5MTQ5OTk0MSwibmJmIjoxNDkxNDk2MzQxLCJqdGkiOiJhZmJhMDEzMzI5OWIwZmY0MzY3MTdlZDE4NmVkODI4OSJ9.bGlInsHHjdveeabz0j_36yICZtK32q1B9oNW44dk_x4"
}
這是我的服務Retrofit 2
:
public interface ApiInterface {
@POST("auth/login")
Call<Login> authenticate(@Body User user);
}
這裏是我的Login Model
public class Login {
@SerializedName("status")
@Expose
private String status;
@SerializedName("token")
@Expose
private String token;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
這裏是我的User Model
:
public class User {
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
public User(String email, String password) {
this.email = email;
this.password = password;
}
}
,這是我怎麼稱呼它在活動
public void sendNetworkRequest(User user){
Log.d(TAG,"send request fired");
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://192.168.1.22:8000/api/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
ApiInterface apiInterface = retrofit.create(ApiInterface.class);
Call<Login> call = apiInterface.authenticate(user);
call.enqueue(new Callback<Login>() {
@Override
public void onResponse(Call<Login> call, Response<Login> response) {
Toast.makeText(LoginActivity.this, "wuhuuu"+ response.body().getToken(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<Login> call, Throwable t) {
Log.d(TAG,"went wrong");
Toast.makeText(LoginActivity.this, "something went wront"+t.toString(), Toast.LENGTH_LONG).show();
}
});
}
更新:這是錯誤我得到:
com.google.gson.stream.malformedjsonexception use jsonreader.setlenient(true) to accept malformed at line 1column 1 $path
更新注意:在email
和password
需要在身體form data
發送。
注意:我可以從Emulator中的瀏覽器訪問API,所以我想這意味着我的邏輯或方法有問題。
完整堆棧跟蹤:
D/LoginActivity: went wrong
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1567)
at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1416)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:597)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:201)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:116)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
'.baseUrl(「HTTP:/ /129.168.1.22:8000/api /「)'你是否在url中發現錯誤? –
您的基本網址是'http://129.168.1.22:8000/api /'。但是錯誤顯示'192.168.1.22'。這有點不對嗎? –
@ArkarAung謝謝我更新了錯誤 – Poorya