我正在构建一个应用程序,只要用户输入任何内容,我就需要使用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
无法弄清楚我做错了什么。请指出我的意思。
答案 0 :(得分:1)
首先,让我们初始化对列表的引用。现在确实是空的。
而不是
public List<String> suggest;
写下这样的东西:
public List<String> suggest = new LinkedList<String>();
这应该可以解决你的NPE,并且可以提出一些新的问题;)。
答案 1 :(得分:-1)
谢谢,但我解决了我的问题。我没有使用XML,而是使用了JSON解析,这比XML解析要快得多。我使用了wikisuggest api并解析它以显示用户输入的建议。很抱歉,但我认为现在没有赏金。
顺便说一句,感谢所有人给予关注并试图解决我的问题,我非常感谢所有人。