HttpsURLConnection连接失败

时间:2019-11-14 09:29:16

标签: java android json httpsurlconnection

我是Android的初学者,现在正在处理AsyncTask和JSONObject类。

我有一个帮助器类,该类接受一个查询String并构建一个URL对象,该对象传递给InputStream对象。但是,即使我的清单文件中具有Internet权限,该应用程序也会在代码行urlConnection.connect()上崩溃并抛出RuntimeException ...原因:java.lang.NullPointerException。 我尝试调试它,似乎连接从未建立,应该返回的String对象保持为空。知道为什么会这样吗?

static String getBookInfo(String queryString) {
        HttpsURLConnection urlConnection = null;
        BufferedReader reader = null;
        String bookJSONString = null;
        try {
            Uri builtUri = Uri.parse(BOOK_BASE_URL).buildUpon()
                    .appendQueryParameter(QUERY_PARM, queryString)
                    .appendQueryParameter(MAX_RESULTS, "10")
                    .appendQueryParameter(PRINT_TYPE, "books").build();
            URL requestURL = new URL(builtUri.toString());
            urlConnection = (HttpsURLConnection) requestURL.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder builder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append("\n");
            }
            if (builder.length() == 0) {
                return null;
            }
            bookJSONString = builder.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        Log.d(LOG_TAG, bookJSONString);
        return bookJSONString;

    }

这也是它显示的错误

java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$4.done(AsyncTask.java:399)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.d(Log.java:155)
        at com.example.whowroteit.NetworkUtils.getBookInfo(NetworkUtils.java:64)
        at com.example.whowroteit.FetchBook.doInBackground(FetchBook.java:22)
        at com.example.whowroteit.FetchBook.doInBackground(FetchBook.java:12)
        at android.os.AsyncTask$3.call(AsyncTask.java:378)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

1 个答案:

答案 0 :(得分:-1)

在您的AndroidManifest.xml中定义这两行代码

android:usesCleartextTraffic="true"
android:largeHeap="true"

例如:-

<application
    android:icon="@mipmap/logo"
    android:label="@string/app_name" 
   -> android:largeHeap="true"
    -> android:usesCleartextTraffic="true">
</application>
相关问题