我正在尝试制作一个简单的测试Android应用程序,该应用程序从URL获取数据,但我的应用程序一直崩溃。 我发现了很多类似的问题,但没有找到适合我的解决方案...
我添加了Internet和网络权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
AsyncTask
private void downloadJSON(final String urlWebService) {
class DownloadJSON extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
try {
loadIntoListView(s);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL(urlWebService);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}
return sb.toString().trim();
} catch (Exception e) {
return null;
}
}
}
DownloadJSON getJSON = new DownloadJSON();
getJSON.execute();
}
Logcat
2019-12-28 15:10:05.120 19441-19441/? I/m.example.test: Not late-enabling -Xcheck:jni (already on)
2019-12-28 15:10:05.214 19441-19441/? E/m.example.test: Unknown bits set in runtime_flags: 0x8000
2019-12-28 15:10:05.215 19441-19441/? W/m.example.test: Unexpected CPU variant for X86 using defaults: x86
2019-12-28 15:10:05.595 19441-19472/com.example.test0 D/OpenGLRenderer: Skia GL Pipeline
2019-12-28 15:10:05.595 19441-19473/com.example.test0 D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
2019-12-28 15:10:05.581 19441-19441/com.example.test0 W/RenderThread: type=1400 audit(0.0:4879): avc: denied { write } for name="property_service" dev="tmpfs" ino=6767 scontext=u:r:untrusted_app_27:s0:c135,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0
2019-12-28 15:10:05.596 19441-19473/com.example.test0 W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
2019-12-28 15:10:05.596 19441-19473/com.example.test0 E/vndksupport: Could not load /vendor/lib/egl/libGLES_emulation.so from sphal namespace: dlopen failed: library "/vendor/lib/egl/libGLES_emulation.so" not found.
2019-12-28 15:10:05.596 19441-19473/com.example.test0 E/libEGL: load_driver(/vendor/lib/egl/libGLES_emulation.so): unknown
2019-12-28 15:10:05.614 19441-19473/com.example.test0 D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2019-12-28 15:10:05.628 19441-19473/com.example.test0 D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2019-12-28 15:10:05.630 19441-19473/com.example.test0 D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2019-12-28 15:10:05.725 19441-19441/com.example.test0 W/m.example.test: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
2019-12-28 15:10:05.727 19441-19441/com.example.test0 W/m.example.test: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2019-12-28 15:10:06.178 19441-19474/com.example.test0 D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2019-12-28 15:10:06.195 19441-19441/com.example.test0 D/AndroidRuntime: Shutting down VM
2019-12-28 15:10:06.196 19441-19441/com.example.test0 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test0, PID: 19441
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:121)
at org.json.JSONTokener.nextValue(JSONTokener.java:98)
at org.json.JSONArray.<init>(JSONArray.java:94)
at org.json.JSONArray.<init>(JSONArray.java:110)
at com.example.test0.MainActivity.loadIntoListView(MainActivity.java:135)
at com.example.test0.MainActivity.access$000(MainActivity.java:40)
at com.example.test0.MainActivity$1DownloadJSON.onPostExecute(MainActivity.java:107)
at com.example.test0.MainActivity$1DownloadJSON.onPostExecute(MainActivity.java:94)
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7116)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
我尝试在模拟器和真实设备上运行应用程序,结果是相同的。这是什么问题?
添加了loadIntoListView
private void loadIntoListView(String json) throws JSONException {
JSONArray jsonArray = new JSONArray(json);
String[] stocks = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
stocks[i] = obj.getString("ID") + " " + obj.getString("user_login");
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, stocks);
listView.setAdapter(arrayAdapter);
}