Java 尝试从RESTful API获取JSON对象时出现无连接错误
我正试图从api获取有关用户ID 1的用户信息并记录它,但我一直遇到以下错误:Java 尝试从RESTful API获取JSON对象时出现无连接错误,java,rest,android-studio,Java,Rest,Android Studio,我正试图从api获取有关用户ID 1的用户信息并记录它,但我一直遇到以下错误: E/Rest response: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: SSL handshake aborted: ssl=0x7c74f2dc88: I/O error during system call, Connection reset by peer 这是我第一次使用RESTful API,所
E/Rest response: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: SSL handshake aborted: ssl=0x7c74f2dc88: I/O error during system call, Connection reset by peer
这是我第一次使用RESTful API,所以我有点经验不足。我试图找到解决堆栈溢出问题的方法,但它们似乎不起作用。我看到一些用户提到这是Android设备在低于Android API 22 5.1棒棒糖的情况下经常发生的错误,但是我正在使用Android 6.0棉花糖,并且仍然收到这个错误
这是我的代码:
public class MainActivity extends AppCompatActivity {
String url = "https://ecoproduce.eu/api/User/1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SSLSocketFactory sslSocketFactory;
try {
sslSocketFactory = new TLSSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
} catch (KeyManagementException ignored) {
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
RequestQueue requestQueue = Volley.newRequestQueue(this);
JsonObjectRequest objectRequest = new JsonObjectRequest(
Request.Method.GET,
url,
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("Rest response", response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Rest response", error.toString());
}
}
);
requestQueue.add(objectRequest);
}
public类MainActivity扩展了AppCompatActivity{
字符串url=”https://ecoproduce.eu/api/User/1";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终SSLSocketFactory SSLSocketFactory;
试一试{
sslSocketFactory=新的TLSSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
}捕获(忽略KeyManagementException){
}捕获(无算法异常){
e、 printStackTrace();
}
RequestQueue RequestQueue=Volley.newRequestQueue(this);
JSONObjectRequestObjectRequest=新的JsonObjectRequest(
Request.Method.GET,
网址,
无效的
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
Log.e(“Rest响应”,response.toString());
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“Rest响应”,error.toString());
}
}
);
添加(objectRequest);
}
}通过将url字符串从
String url = "https://ecoproduce.eu/api/User/1";
到
及加入
android:usesCleartextTraffic="true"
在android清单文件中。
在以下链接中找到答案:
您是否通过https为您的端点提供服务?看起来您使用的是纯HTTP,而Volley需要SSL握手。最初,url是http,但我将其更改为https,因为我收到以下错误:E/Rest响应:com.android.volley.NoConnectionError:java.io.IOException:不允许到ecoproduct.eu的明文http流量。将更改回http并找到另一个解决方案。请尝试从浏览器连接到右侧,并查看他们在SSL设置中是否存在问题。您的代码可能完全正常。
android:usesCleartextTraffic="true"