メソッドcall.enqueue()は呼び出しません。そして私はなぜそれを理解することをあきらめますか?助けてください。Retrofit 2(Android)でPOSTリクエストを送信する方法
POSTリクエストにRetrofit2を使用します。これは私の単純なプロジェクトの例です。
私はAPIサービスFaceAPIクラスを持っています。コード:
package com.facelocation.testretrofit;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface FaceAPI {
@POST("api/auth/register")
Call<ResponseBody> registerUser(
@Body RegistrationBody body
);
}
私はJSON形式(2つのパラメータのみ - メールアドレスとパスワード)で、サーバー上のプッシュしようとしているRegistrationBodyクラスを持っています。コード:
package com.facelocation.testretrofit;
public class RegistrationBody {
public String email;
public String password;
public RegistrationBody(String email, String password) {
this.email = email;
this.password = password;
}
}
そして、私は唯一のボタンで、最も簡単なMainActivityクラスを持っています。コード:
package com.facelocation.testretrofit;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
String TAG = "Reg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://face-location.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
FaceAPI api = retrofit.create(FaceAPI.class);
RegistrationBody reg = new RegistrationBody("[email protected]", "password12");
Call<ResponseBody> call = api.registerUser(reg);
Log.i(TAG, "Works until here");
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Toast.makeText(MainActivity.this, "Все прошло хорошо",Toast.LENGTH_SHORT).show();
Log.i(TAG, "THIS METHOD DOESN'T CALL! WHY?" + response.toString());
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
});
}
}
このコードを実行すると、エラーは発生しません。私はサーバーレスポンスを得られません。このコード行はLog.i(TAG、 "Works until here");しかし、次の方法は、私が呼んでいないと思う。私は何故エラーやサーバレスポンスを得られなかったのか理解できません。助けてください!
「onFailure」にログを追加してください –
ああ、私は恥知らずです!はい。例外があります。SSLHandshakeException証明書パスの信頼アンカーが見つかりません。 ( – Nastromo
@ Pavneet_Singhは正しいですか?Logでprint t.getMessage()を試してみてください。あなたのResponseBodyクラスに問題があるか、他の問題がある場合は、答えが得られるでしょう。 –