1

ユーザーが何かを入力するたびに、autocompletetextview を使用して自動提案を行う必要があるアプリケーションを構築しています。

これが私のコードです:

public List<String> suggest;

HttpURLConnection con = null;
            String newText = key[0];
            newText = newText.trim();
            newText = newText.replace(" ", "+");
            try {
                // Check if task has been interrupted
                if (Thread.interrupted())
                    throw new InterruptedException();
                // Build RESTful query for Google API
                // String q = URLEncoder.encode(original, "UTF-8");
                URL url = new URL(
                        "http://google.com/complete/search?output=toolbar&q="
                                + newText);
                con = (HttpURLConnection) url.openConnection();
                con.setReadTimeout(10000 /* milliseconds */);
                con.setConnectTimeout(15000 /* milliseconds */);
                con.setRequestMethod("GET");
                // con.addRequestProperty("Referer",
                // "http://www.pragprog.com/titles/eband3/hello-android");
                con.setDoInput(true);
                // Start the query
                con.connect();

                // Check if task has been interrupted
                if (Thread.interrupted())
                    throw new InterruptedException();
                // Read results from the query
                XmlPullParser parser = Xml.newPullParser();
                parser.setInput(con.getInputStream(), null);
                int eventType = parser.getEventType();
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    String name = parser.getName();
                    if (eventType == XmlPullParser.START_TAG
                            && name.equalsIgnoreCase("suggestion")) {
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            if (parser.getAttributeName(i)
                                    .equalsIgnoreCase("data")) {
                                suggest.add(parser.getAttributeValue(i));
                            }
                        }
                    }
                    eventType = parser.next();
                }

                // Check if task has been interrupted
                if (Thread.interrupted())
                    throw new InterruptedException();

            } catch (Exception e) {

            }

これにより、ログエラーが次のように表示されます。

10-22 11:36:46.531: E/AndroidRuntime(22291): FATAL EXCEPTION: main
10-22 11:36:46.531: E/AndroidRuntime(22291): java.lang.NullPointerException
10-22 11:36:46.531: E/AndroidRuntime(22291):    at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:291)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at android.widget.AutoCompleteTextView$PopupDataSetObserver$1.run(AutoCompleteTextView.java:1670)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at android.os.Handler.handleCallback(Handler.java:587)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at android.os.Looper.loop(Looper.java:130)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at  android.app.ActivityThread.main(ActivityThread.java:3689)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at java.lang.reflect.Method.invokeNative(Native Method)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at java.lang.reflect.Method.invoke(Method.java:507)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-22 11:36:46.531: E/AndroidRuntime(22291):    at dalvik.system.NativeStart.main(Native Method)
10-22 11:36:46.539: E/(1459): Dumpstate > /data/log/dumpstate_app_error

私が間違っていることを理解できません。その方向に向けてください。

4

2 に答える 2

1

まず、リストへの参照を初期化しましょう。それは確かに今nullです。

それ以外の

public List<String> suggest;

次のように書きます。

public List<String> suggest = new LinkedList<String>();

それはあなたのNPEを解決するはずであり、まあ、いくつかの新しい質問を促進することができます;)。

于 2012-10-22T10:43:24.640 に答える
-1

ありがとうございます。問題は解決しました。XML を使用する代わりに、JSON 解析を使用しました。これは、XML 解析よりもはるかに高速です。私は wikisuggest api を使用し、それを解析して、ユーザーの入力に応じて提案を表示しました。申し訳ありませんが、今は報奨金はないと思います。

ところで、注意を払って私の問題を解決しようとしてくれてありがとう、本当に感謝しています。

于 2012-10-25T04:48:12.453 に答える