使用改造 2 时出现未知问题



我是Android新手,我想开发一个基于REST API的应用程序。

所以我搜索并找到了改装 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;
}
}

来自 Github 的 JSON 代码

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

我想获取名称和博客网址

当我运行程序时,输出是:

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)

问题是什么,我该如何解决?

这里的第一步是理解错误。

尝试从 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中获取一些有关出了什么问题的更有用的信息,之后会更容易弄清楚如何解决它 您是否还在清单中添加了互联网访问权限?

SSL证书问题时出现 SSL 异常。您需要将 SSL 证书添加到服务器端。

你试过吗

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>

最新更新