簡體   English   中英

從URL解析Android 4.4中的簡單JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM