[英]Parse simple JSON in Android 4.4 from URL
我正在尝试从如下所示的URL解析Android 4.4中的非常简单的JSON:
{
"code":"asdfg"
}
我有一个适用于Android 7.0的代码,但是由于某种原因,它在Android 4.4中不起作用,而且在线指南也没有运气。
任何帮助表示赞赏:)
编辑-当前代码(适用于Android 7,但不适用于Android 4.4):
static class Page {
String code;
}
public static String checkIp() throws Exception {
String json = readUrl("https://link.com/json.php"); //Not the real URL, replaced as an example
Gson gson = new Gson();
Page page = gson.fromJson(json, Page.class);
Log.d("MainActivity", page.code);
return (page.code);
}
private static String readUrl(String urlString) throws Exception {
BufferedReader reader = null;
try {
URL url = new URL(urlString);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1)
buffer.append(chars, 0, read);
return buffer.toString();
} finally {
if (reader != null)
reader.close();
}
}
这些行给我一个错误:
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
错误:
javax.net.ssl.SSLException: SSL handshake aborted: ssl=0xb8ca3c40: I/O error during system call, Connection reset by peer
W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405)
W/System.err: at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
W/System.err: at com.android.okhttp.Connection.connect(Connection.java:107)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
W/System.err: at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
W/System.err: at java.net.URL.openStream(URL.java:470)
首先,检查网址是否正常运行。 有时会发生链接无法正常工作的情况。 并正确检查HTTPS或HTTP,因为调用http link(vise-versa)的https可能会引发此错误。 因为握手问题主要出现。
方法“ checkIp()”的调用需要来自后台线程。
new Thread(new Runnable() {
@Override
public void run() {
try {
String s = checkIp();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
除了“线程”问题外,代码中没有其他错误。
我认为这可以解决您的问题。 我在末端检查它是否可以正常链接。
让我知道是否不工作。
目标主机没有正确的签名证书。 将主机证书添加到您的设备中,或者从GoDaddy等发行机构获取正确的证书,或者切换到http进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.