неизвестная проблема при использовании Retrofit 2 - PullRequest
0 голосов
/ 21 сентября 2018

Я новичок в Android и хочу создать приложение на основе REST API.

Итак, я нашел и нашел Retrofit 2.

Я использовал образец модификации, который нашелв Github, чтобы узнать, как это работает.

Эти файлы являются моими классами Java:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textv = findViewById(R.id.textv);
        GitHubClient gitHubClient;
        gitHubClient = ServiceGenerator.createService(GitHubClient.class);

        final Call<GitHubUser> call = gitHubClient.getFeed("google");
        call.enqueue(new Callback<GitHubUser>() {
            @Override
            public void onResponse(Call<GitHubUser> call, Response<GitHubUser> response) {
                GitHubUser gitModel = response.body();
                if (gitModel != null) {
                    textv.setText(getString(R.string.main_response_text,
                            gitModel.getName(),
                            gitModel.getBlog()));
                } else {
                    textv.setText("user doesn't exist");
                }
            }

            @Override
            public void onFailure(Call<GitHubUser> call, Throwable t) {
                textv.setText(t.getMessage());
            }

        });

    }

}

GithubClient.java

public interface GitHubClient {
    @GET("users/{user}")
    Call<GitHubUser> getFeed(@Path("user") String user);
}

ServiceGenerator.java

public class ServiceGenerator {

    public static final String API_BASE_URL = "https://api.github.com/";

    private static HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    private static Interceptor logging = interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);

    private static OkHttpClient httpClient = new OkHttpClient.Builder()
            .addInterceptor(logging)
            .build();

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(httpClient).build();
        return retrofit.create(serviceClass);
    }
}

GithubUser.java

public class GitHubUser {

    private String name;
    private String blog;

    public String getName() {
        return name;
    }

    public String getBlog() {
        return blog;
    }

}

JSON-код от Github

{
  ...
  "name": "Google",
  "blog": "https://opensource.google.com/",
  ...
}

Я хочу получить имя и URL блога

И когда я запускаю программу, вывод:

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb8952b10: Failure in SSL library, usually a protocol error
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version(external/openssl/ssl/s23_clnt.c:741 0x83bc3770:0x00000000)

В чем проблема и как я могу ее исправить?

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Исключение SSL возникает при выдаче сертификата SSL.Вам необходимо добавить ssl-сертификат на стороне сервера.

0 голосов
/ 03 мая 2019

Вы пробовали

android:networkSecurityConfig="@xml/network_security_config"

в своем теге манифеста

и поместите следующий файл в res >> xml >>

network_security_config.xml

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">static.food2fork.com</domain>
    </domain-config>
</network-security-config>
0 голосов
/ 22 сентября 2018

Первым шагом здесь будет понимание ошибки.

Попробуйте распечатать ошибку из вашего метода onFailure следующим образом:

@Override
public void onFailure(Call<GitHubUser> call, Throwable t) {
    textv.setText("unknown error"); // can also do textv.setText(t.getMessage()) to display error reason
    t.printStackTrace();
}

Вы должны получить в своем logcat еще несколько полезной информациио том, что пошло не так, вам будет легче выяснить, как решить эту проблему. Также вы добавили разрешение на доступ в Интернет в своем манифесте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...