getInputStream是否会导致应用程序崩溃?

时间:2019-12-29 08:55:09

标签: android nullpointerexception android-asynctask

我正在尝试制作一个简单的测试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);
}

0 个答案:

没有答案