Java Android Listview Filter

  • Java

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Java Android Listview Filter

    Hallo zusammen.

    Ich würde gerne mein Listview Filtern, jedoch stürzt die ab mit folgender Begründung ab:

    Quellcode

    1. 4362-4362/test_app.com.bmu_app E/InputEventSender﹕ Exception dispatching finished signal.
    2. 03-18 12:35:14.216 4362-4362/test_app.com.bmu_app E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
    3. 03-18 12:35:14.217 4362-4362/test_app.com.bmu_app E/MessageQueue-JNI﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'android.widget.Filter android.widget.ArrayAdapter.getFilter()' on a null object reference
    4. at test_app.com.test_app.menu4_Fragment$1.onTextChanged(menu4_Fragment.java:66)



    Hier noch der Code:

    Java-Quellcode

    1. import android.app.ProgressDialog;
    2. import android.os.AsyncTask;
    3. import android.os.Bundle;
    4. import android.support.v4.app.Fragment;
    5. import android.text.Editable;
    6. import android.text.TextWatcher;
    7. import android.view.LayoutInflater;
    8. import android.view.View;
    9. import android.view.ViewGroup;
    10. import android.widget.AdapterView;
    11. import android.widget.ArrayAdapter;
    12. import android.widget.Button;
    13. import android.widget.EditText;
    14. import android.widget.ListAdapter;
    15. import android.widget.ListView;
    16. import android.widget.SimpleAdapter;
    17. import android.widget.TextView;
    18. import android.widget.Toast;
    19. import org.json.JSONArray;
    20. import org.json.JSONException;
    21. import org.json.JSONObject;
    22. import java.util.ArrayList;
    23. import java.util.HashMap;
    24. import java.util.List;
    25. /**
    26. * Created by Roger on 11.03.2015.
    27. */
    28. public class menu4_Fragment extends Fragment {
    29. View rootview;
    30. ListView list;
    31. TextView ver;
    32. TextView name;
    33. TextView api;
    34. Button Btngetdata;
    35. ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
    36. //URL to get JSON Array
    37. private static String url = "http://192.168.61.5/androidapp/anlagen_verzeichniss.php";
    38. //JSON Node Names
    39. private static final String TAG_OS = "android";
    40. private static final String TAG_VER = "AnlagenNr";
    41. private static final String TAG_NAME = "ProjektBezeichnung";
    42. private static final String TAG_API = "ProjektBezeichnung";
    43. JSONArray android = null;
    44. private List<String> originalData = null;
    45. private List<String>filteredData = null;
    46. private ArrayAdapter simpleAdapter;
    47. @Override
    48. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    49. rootview = inflater.inflate(R.layout.menu4_layout, container, false);
    50. final ListView listview = (ListView) rootview.findViewById(R.id.listView1);
    51. final EditText inputSearch = (EditText) rootview.findViewById(R.id.inputSearch);
    52. new JSONParse().execute();
    53. oslist = new ArrayList<HashMap<String, String>>();
    54. inputSearch.addTextChangedListener(new TextWatcher() {
    55. @Override
    56. public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    57. // When user changed the Text
    58. menu4_Fragment.this.simpleAdapter.getFilter().filter(cs);
    59. }
    60. @Override
    61. public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
    62. int arg3) {
    63. // TODO Auto-generated method stub
    64. }
    65. @Override
    66. public void afterTextChanged(Editable arg0) {
    67. // TODO Auto-generated method stub
    68. }
    69. });
    70. return rootview;
    71. }
    72. private class JSONParse extends AsyncTask<String, String, JSONObject> {
    73. private ProgressDialog pDialog;
    74. @Override
    75. protected void onPreExecute() {
    76. super.onPreExecute();
    77. //ver = (TextView)rootview.findViewById(R.id.vers);
    78. name = (TextView)rootview.findViewById(R.id.name);
    79. api = (TextView)rootview.findViewById(R.id.api);
    80. pDialog = new ProgressDialog(getActivity());
    81. pDialog.setMessage("Daten werden Geladen ...");
    82. pDialog.setIndeterminate(false);
    83. pDialog.setCancelable(true);
    84. pDialog.show();
    85. }
    86. @Override
    87. protected JSONObject doInBackground(String... args) {
    88. JSONParser jParser = new JSONParser();
    89. // Getting JSON from URL
    90. JSONObject json = jParser.getJSONFromUrl(url);
    91. return json;
    92. }
    93. @Override
    94. protected void onPostExecute(JSONObject json) {
    95. pDialog.dismiss();
    96. try {
    97. // Getting JSON Array from URL
    98. android = json.getJSONArray(TAG_OS);
    99. for(int i = 0; i < android.length(); i++){
    100. JSONObject c = android.getJSONObject(i);
    101. // Storing JSON item in a Variable
    102. String ver = c.getString(TAG_VER);
    103. String name = c.getString(TAG_NAME);
    104. String api = c.getString(TAG_API);
    105. // Adding value HashMap key => value
    106. HashMap<String, String> map = new HashMap<String, String>();
    107. map.put(TAG_VER, ver);
    108. map.put(TAG_NAME, name);
    109. map.put(TAG_API, api);
    110. oslist.add(map);
    111. list=(ListView)rootview.findViewById(R.id.listView1);
    112. ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
    113. R.layout.list_v,
    114. new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] {
    115. R.id.name, R.id.api});
    116. list.setAdapter(adapter);
    117. list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    118. @Override
    119. public void onItemClick(AdapterView<?> parent, View view,
    120. int position, long id) {
    121. Toast.makeText(getActivity(), "You Clicked at " + oslist.get(position).get("AnlagenNr"), Toast.LENGTH_SHORT).show();
    122. }
    123. });
    124. }
    125. } catch (JSONException e) {
    126. e.printStackTrace();
    127. }
    128. }
    129. }
    130. }


    Kann mir jemand helfen? :)
    Ich kriege es leider nicht zum laufen und habe schon vieles aber leider nicht das richtige Probiert -.-

    Quellcode

    1. ​ final ArrayAdapter simpleAdapter = new ArrayAdapter();


    Kannst du mir bitte weiterhelfen:s
    So auf die schnelle wird das nichts. Ich muss mich in den nächsten Tagen aber auch mal mit den Filtern beschäftigen, bei meinem Webradio da brauch ich das für die Senderliste, danach können wir mal schauen.

    Edit: @schnibli
    Hast du mal versucht deinen ListAdapter anstatt nur in der void onPostExecute deines AsyncTasks, mal in der menu4_Fragment Klasse zu packen, im AsyncTask weist du ihn zu, somit müsstest du diesen dann auch filtern können.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdock“ ()

    Ich bin Fleißig daran aber finde keine Funktionierende Lösung.
    Spoiler anzeigen

    Quellcode

    1. public class menu4_Fragment extends Fragment {
    2. View rootview;
    3. ListView list;
    4. EditText search;
    5. TextView ver;
    6. TextView name;
    7. TextView api;
    8. Button Btngetdata;
    9. ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
    10. //URL to get JSON Array
    11. private static String url = "http://192.168.61.5/androidapp/anlagen_verzeichniss.php";
    12. //JSON Node Names
    13. private static final String TAG_OS = "android";
    14. private static final String TAG_VER = "AnlagenNr";
    15. private static final String TAG_NAME = "ProjektBezeichnung";
    16. private static final String TAG_API = "ProjektBezeichnung";
    17. JSONArray android = null;
    18. private List<String> originalData = null;
    19. private List<String>filteredData = null;
    20. private ArrayAdapter simpleAdapter;
    21. @Override
    22. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    23. rootview = inflater.inflate(R.layout.menu4_layout, container, false);
    24. final ListView listview = (ListView) rootview.findViewById(R.id.listView1);
    25. final EditText inputSearch = (EditText) rootview.findViewById(R.id.inputSearch);
    26. new JSONParse().execute();
    27. return rootview;
    28. }
    29. private class JSONParse extends AsyncTask<String, String, JSONObject> {
    30. private ProgressDialog pDialog;
    31. @Override
    32. protected void onPreExecute() {
    33. super.onPreExecute();
    34. //ver = (TextView)rootview.findViewById(R.id.vers);
    35. name = (TextView)rootview.findViewById(R.id.name);
    36. api = (TextView)rootview.findViewById(R.id.api);
    37. pDialog = new ProgressDialog(getActivity());
    38. pDialog.setMessage("Daten werden Geladen ...");
    39. pDialog.setIndeterminate(false);
    40. pDialog.setCancelable(true);
    41. pDialog.show();
    42. oslist = new ArrayList<HashMap<String, String>>();
    43. }
    44. @Override
    45. protected JSONObject doInBackground(String... args) {
    46. JSONParser jParser = new JSONParser();
    47. // Getting JSON from URL
    48. JSONObject json = jParser.getJSONFromUrl(url);
    49. return json;
    50. }
    51. @Override
    52. protected void onPostExecute(JSONObject json) {
    53. pDialog.dismiss();
    54. try {
    55. // Getting JSON Array from URL
    56. android = json.getJSONArray(TAG_OS);
    57. for(int i = 0; i < android.length(); i++){
    58. JSONObject c = android.getJSONObject(i);
    59. // Storing JSON item in a Variable
    60. String ver = c.getString(TAG_VER);
    61. String name = c.getString(TAG_NAME);
    62. String api = c.getString(TAG_API);
    63. // Adding value HashMap key => value
    64. HashMap<String, String> map = new HashMap<String, String>();
    65. map.put(TAG_VER, ver);
    66. map.put(TAG_NAME, name);
    67. map.put(TAG_API, api);
    68. oslist.add(map);
    69. list=(ListView)rootview.findViewById(R.id.listView1);
    70. search=(EditText)rootview.findViewById(R.id.inputSearch);
    71. ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
    72. R.layout.list_v,
    73. new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] {
    74. R.id.name, R.id.api});
    75. list.setAdapter(adapter);
    76. ;
    77. search.addTextChangedListener(new TextWatcher() {
    78. @Override
    79. public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    80. // When user changed the Text
    81. menu4_Fragment.this.getActivity().adapter.getFilter().filter(cs);
    82. }
    83. @Override
    84. public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
    85. int arg3) {
    86. // TODO Auto-generated method stub
    87. }
    88. @Override
    89. public void afterTextChanged(Editable arg0) {
    90. // TODO Auto-generated method stub
    91. }
    92. });
    93. list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    94. @Override
    95. public void onItemClick(AdapterView<?> parent, View view,
    96. int position, long id) {
    97. Toast.makeText(getActivity(), "You Clicked at " + oslist.get(position).get("AnlagenNr"), Toast.LENGTH_SHORT).show();
    98. }
    99. });
    100. }
    101. } catch (JSONException e) {
    102. e.printStackTrace();
    103. }
    104. }
    105. }


    Leider habe ich folgenden Fehler:

    Quellcode

    1. menu4_Fragment.this.getActivity().adapter.getFilter().filter(cs);

    Cannot resolve symbole 'adapter' :s