Android AutoCompleteTextView-在performFiltering()期间发生异常!
我在构建AutoCompleteTextView时遇到一些问题 我试图在AutoCompleteTextView中显示一些Json数据,但不起作用 当我试图写一些东西时,我收到了这些错误:Android AutoCompleteTextView-在performFiltering()期间发生异常!,android,Android,我在构建AutoCompleteTextView时遇到一些问题 我试图在AutoCompleteTextView中显示一些Json数据,但不起作用 当我试图写一些东西时,我收到了这些错误: W/Filter(13081): An exception occured during performFiltering()! W/Filter(13081): java.lang.NullPointerException at java.util.ArrayList.<init>(Array
W/Filter(13081): An exception occured during performFiltering()!
W/Filter(13081): java.lang.NullPointerException at java.util.ArrayList.<init>(ArrayList.java:93)
W/Filter(13081): at android.widget.ArrayAdapter$ArrayFilter.performFiltering(ArrayAdapter.java:457)
W/Filter(13081): at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
我的代码:
public class MainActivity extends Activity {
List<String> responseList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoCompleteTextView auto1 = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
new HttpGetTask().execute();
}
private class HttpGetTask extends AsyncTask<Void, Void, String> {
String URL = "http://192.168.1.70/example/suggestion.php?name=";
AndroidHttpClient mClient = AndroidHttpClient.newInstance("");
@Override
protected String doInBackground(Void... params) {
HttpGet request = new HttpGet(URL);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
return mClient.execute(request, responseHandler);
} catch (ClientProtocolException exception) {
exception.printStackTrace();
} catch (IOException exception) {
exception.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
try {
JSONArray json = new JSONArray(result);
Log.v("ResponseCity", result);
List<String> responseList = new ArrayList<String>();
for (int i = 0; i < json.length(); i++) {
final JSONObject e = json.getJSONObject(i);
String name = e.getString("name");
responseList.add(name);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (null != mClient)
mClient.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_dropdown_item_1line, responseList);
AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.autoCompleteTextView1);
textView.setAdapter(adapter);
}
}
}
公共类MainActivity扩展活动{
列出回应者;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoCompleteTextView auto1=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
新建HttpGetTask().execute();
}
私有类HttpGetTask扩展异步任务{
字符串URL=”http://192.168.1.70/example/suggestion.php?name=";
AndroidHttpClient mClient=AndroidHttpClient.newInstance(“”);
@凌驾
受保护字符串doInBackground(无效…参数){
HttpGet请求=新的HttpGet(URL);
ResponseHandler ResponseHandler=新BasicResponseHandler();
试一试{
返回mClient.execute(请求、响应句柄);
}捕获(ClientProtocolException异常){
异常。printStackTrace();
}捕获(IOException异常){
异常。printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
试一试{
JSONArray json=新JSONArray(结果);
Log.v(“责任”,结果);
List responseList=new ArrayList();
for(int i=0;i
我做错了什么?谢谢。发生的情况是抛出了一个
JSONException
,而responseList
未初始化。JSONException是因为这一行
JSONArray json = new JSONArray(result);
api调用返回的是JSONObject
,而不是JSONArray
。要修复NPE
,请移动List responseList=new ArrayList()代码>在块之前尝试块。这样,如果不更改任何其他内容,则将提供一个空数据集。应用程序不会崩溃(至少使用相同的stacktrace)
JSONArray json = new JSONArray(result);