如果JSON没有返回任何数据,Android应用程序崩溃

时间:2015-08-24 10:50:51

标签: android json

我构建了一个读取用户位置(纬度和经度)的Android应用程序,并将结果发送到API以显示附近的位置。 当API无法找到用户位置或API找不到附近的位置时,应用程序崩溃。 实际上我使用以下方法,我认为崩溃来自那里:

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            // check if the view already exists
            // if so, no need to inflate and findViewById again!
            if (convertView == null) {

                // Inflate the custom row layout from your XML.
                convertView = mInflater.inflate(R.layout.row_book, null);

                // create a new "Holder" with subviews
                holder = new ViewHolder();
                holder.titleTextView = (TextView) convertView.findViewById(R.id.text_title);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            JSONObject jsonObject = (JSONObject) getItem(position);
 // Grab the title and author from the JSON
            if (!jsonObject.isNull("placeName")) {
                String placeName = jsonObject.optString("placeName");

                // Send these Strings to the TextViews for display
                holder.titleTextView.setText(placeName);
            }

            return convertView;
        }

如果周围没有地方(根本没有JSON数据),我正在寻找显示默认消息的解决方案。比应用程序崩溃更好!

我通常在我的物理设备上测试我的应用,但是当我在Android Studio运行选项中测试时:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
            at android.os.Handler.<init>(Handler.java:200)
            at android.os.Handler.<init>(Handler.java:114)
            at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:2968)
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:3248)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:286)
            at pack.MainActivity.queryBooks(MainActivity.java:122)
            at pack.MainActivity.access$200(MainActivity.java:19)
            at pack.MainActivity$1.gotLocation(MainActivity.java:63)
            at pack.MyLocation$GetLastLocation.run(MyLocation.java:114)
            at java.util.Timer$TimerImpl.run(Timer.java:284)

编辑: 我发现我的API返回错误204 - 当查询没有返回结果时没有内容。 我认为这些信息可能有助于解决问题。

编辑2: 好。应用程序崩溃,因为API返回错误204 - 没有内容。 幸运的是我可以控制API,并且我将其更改为显示空的json对象并且它没有崩溃。

1 个答案:

答案 0 :(得分:0)

应用程序崩溃,因为API返回错误204 - 无内容。 该应用程序试图从“无内容”网址中读取JSOn数据,然后崩溃了。 幸运的是我控制了API并且我将其更改为显示空的json对象并且它没有崩溃。 问题解决了。