我是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>