2015-05-17 5 views
1

У меня возникли проблемы с созданием AutoCompleteTextView.AutoCompleteTextView - Исключение произошло во время выполненияFiltering()!

Я пытаюсь показать некоторые данные Json внутри AutoCompleteTextView, но не работает.

Я получаю эти ошибки, когда я пытаюсь написать что-то:

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) 

Здесь мой JSon данных

{"results":[{"id":"1","name":"Aveiro"},{"id":"2","name":"Beja"},{"id":"3","name":"Braga"}]} 

Мой код:

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); 
    } 
    } 
} 

Что я делаю неправильно? Благодарю.

ответ

0

Что происходит, так это то, что выброшено JSONException, оставив responseList неинициализированным. JSONException из-за этой линии

JSONArray json = new JSONArray(result); 

вызов АФИ возвращая JSONObject, не JSONArray. Чтобы исправить NPE, переместите List<String> responseList = new ArrayList<String>(); перед блоком try. Таким образом, если вы ничего не измените, вы предоставите пустой набор данных. Приложение не будет разбиваться (по крайней мере, с той же самой стопкой)

Смежные вопросы