我是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)
答案 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>