The method get(String) is undefined for the type String error in adding the codes to the filter class of adapter in android

20,964
ArrayList<String> songsList;

so songsList is an ArrayList of Strings... if you do songsList.get(i) you'll have a String. The String object has not a "get" method, sou you cannot go further with

songsList.get(i).get("title").toString().

The same thing happens here:

searchResults=new ArrayList<HashMap<String, String>>

so if you call searchResults.add you have to pass a hashmap, not a String.

Please check your type definitions again and it will work.

Share:
20,964
jack
Author by

jack

Updated on February 14, 2020

Comments

  • jack
    jack over 4 years

    For Finding the key items fromt he listview i had not used filter in the adapter, but now by following this link aded the filter but in this line String playerName=songsList.get(i).get("title").toString(); I am getting the error

     The method get(String) is undefined for the type String
    

    and also in searchResults.add(songsList.get(i)); as

    The method add(HashMap<String,String>) in the type ArrayList<HashMap<String,String>> is not applicable for the arguments (String)
    

    Here's is my entire code

     public class Home extends ListActivity {
    
    //how many to load on reaching the bottom
        int itemsPerPage = 15;
        boolean loadingMore = false;                        
    
        //For test data :-)
        Calendar d = Calendar.getInstance();
    
    ArrayList<String> songsList;
    ListView list;
        LazyAdapter adapter;
    JSONArray posts;
    
    
    
     //ArrayList thats going to hold the search results
      ArrayList<HashMap<String, String>> searchResults;
      LayoutInflater inflater;
    // All static variables
     static final String URL = "http://india.abc.net/ads/?json=get_recent_posts";
    
    
     static final String KEY_POSTS = "posts";
     static final String KEY_ID = "id";
    static final String KEY_TITLE = "title";
    static final String KEY_DATE = "date";
    static final String KEY_CONTENT = "content";
    static final String KEY_AUTHOR = "author";
    static final String KEY_NAME = "name";
    static final String KEY_ATTACHMENTS = "attachments";
    static final String KEY_SLUG = "slug";
    static final String KEY_THUMB_URL = "thumbnail";
    static final String KEY_IMAGES = "images";
    static final String KEY_URL = "url";
    
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        final EditText searchBox=(EditText) findViewById(R.id.search);
        final ListView  list=(ListView)findViewById(android.R.id.list);
    
        //get the LayoutInflater for inflating the customomView
         //this will be used in the custom adapter
         inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    
    
    
    
        final  ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    
    
            // Creating JSON Parser instance
                    final JSONParser jParser = new JSONParser();
    
                    // getting JSON string from URL
                    JSONObject json = jParser.getJSONFromUrl(URL);
                    try {
                         posts = json.getJSONArray(KEY_POSTS);
    
            // looping through all song nodes <song>
                    for(int i = 0; i < posts.length(); i++){
                        JSONObject c = posts.getJSONObject(i);
                        // Storing each json item in variable
                        String id = c.getString(KEY_ID);
                        String title = c.getString(KEY_TITLE);
                        String date = c.getString(KEY_DATE);
                        String content = c.getString(KEY_CONTENT);
                        // to remove all <P> </p> and <br /> and replace with ""
                         content = content.replace("<br />", "");
                         content = content.replace("<p>", "");
                         content = content.replace("</p>", "");
    
                        //authornumber is agin  JSON Object
                        JSONObject author = c.getJSONObject(KEY_AUTHOR);
                        String name = author.getString(KEY_NAME);
    
                        String url = null;
                        String slug = null;
                        try {
                        JSONArray atta = c.getJSONArray("attachments");
                        for(int j = 0; j < atta.length(); j++){
                            JSONObject d = atta.getJSONObject(j);
    
                            slug = d.getString(KEY_SLUG);
    
                            JSONObject images = d.getJSONObject(KEY_IMAGES);
    
                            JSONObject thumbnail =    images.getJSONObject(KEY_THUMB_URL);
                            url = thumbnail.getString(KEY_URL);
    
                        }
                        } catch (Exception e) {
                            e.printStackTrace();
    
                        }
    
    
    
    
                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();
    
                // adding each child node to HashMap key => value
                map.put(KEY_ID, id);
                map.put(KEY_TITLE, title);
                map.put(KEY_DATE, date);
                map.put(KEY_NAME, name);
                map.put(KEY_CONTENT, content);
                map.put(KEY_SLUG, slug);
                map.put(KEY_URL, url);
    
    
                // adding HashList to ArrayList
                songsList.add(map);
                    }   
                    }catch (JSONException e) {
                        e.printStackTrace();
    
                        }
    
    
                  //searchResults=OriginalValues initially
                    searchResults=new ArrayList<HashMap<String, String>>(songsList);
    
    
             // Getting adapter by passing json data ArrayList
                adapter=new LazyAdapter(this, songsList);    
                 list.setAdapter(adapter);
    
                 searchBox.addTextChangedListener(new TextWatcher() {
    
                     public void onTextChanged(CharSequence s, int start, int before, int count) {
                         adapter.getFilter().filter(s.toString());
                     }
    
                     public void beforeTextChanged(CharSequence s, int start, int count,
                         int after) {
    
                       }
    
                       public void afterTextChanged(Editable s) {
    
                       }
                      });
    
    
        // Launching new screen on Selecting Single ListItem
        list.setOnItemClickListener(new OnItemClickListener() {
    
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                HashMap<String, String> map = songsList.get(position);
    
                Intent in = new Intent(Home.this, Singlemenuitem.class);
                in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
                in.putExtra(KEY_DATE, map.get(KEY_DATE));                         
                in.putExtra(KEY_NAME, map.get(KEY_NAME));
                in.putExtra(KEY_CONTENT, map.get(KEY_CONTENT));
                in.putExtra(KEY_URL, map.get(KEY_URL));
    
                startActivity(in);
            }                
        });  
    

    and the adapter class is

          public class LazyAdapter extends BaseAdapter implements Filterable{
          TextView title;
          private Activity activity;
             // private TextWatcher textWatcher;
            private ArrayList<HashMap<String, String>> data;
            private static LayoutInflater inflater=null;
           public ImageLoader imageLoader; 
           final EditText searchBox=(EditText) findViewById(R.id.search);
           ArrayList<HashMap<String, String>> searchResults;
           ArrayList<String> songsList;
    
    
       public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }
    
    
    private EditText findViewById(int search) {
        // TODO Auto-generated method stub
        return null;
    }
    
    
    public int getCount() {
        return data.size();
    }
    
    public Object getItem(int position) {
        return position;
    }
    
    public long getItemId(int position) {
        return position;
    }
    
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.activity_home, null);
    
        TextView title = (TextView)vi.findViewById(R.id.title); // title
        TextView date = (TextView)vi.findViewById(R.id.date); // artist name
        TextView content = (TextView)vi.findViewById(R.id.content);  // duration
        TextView name = (TextView)vi.findViewById(R.id.name); 
        // duration
        ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
    
        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);
    
    
    
        // Setting all values in listview
       title.setText(song.get(Home.KEY_TITLE));
        date.setText(song.get(Home.KEY_DATE));
        content.setText(song.get(Home.KEY_CONTENT));
        name.setText(song.get(Home.KEY_NAME));
    
       imageLoader.DisplayImage(song.get(Home.KEY_URL), thumb_image);
        return vi;
    }
    
    
    public void add(String string) {
        // TODO Auto-generated method stub
    
    }
    
    
    @Override
    
    public Filter getFilter() {
        Filter filter = new Filter() {
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence data,FilterResults searchResults) {
    
                songsList = (ArrayList<String>) searchResults.values; // has the filtered values
                notifyDataSetChanged();  // notifies the data with new filtered values
            }
    
            @Override
            protected FilterResults performFiltering(CharSequence playerName) {
                // TODO Auto-generated method stub
                return null;
            }
        };
        String searchString=searchBox.getText().toString();
        int textLength=searchString.length();
    
               //clear the initial data set
        searchResults.clear();
    
        for(int i=0;i<songsList.size();i++)
        {
       String playerName=songsList.get(i).get("title").toString();
    
       if(textLength<=playerName.length()){
    
       //compare the String in EditText with Names in the ArrayList
         if(searchString.equalsIgnoreCase(playerName.substring(0,textLength)))
    
         searchResults.add(songsList.get(i));
       }
        }
        return filter;
    
    
    }
    }
    
    • WarrenFaith
      WarrenFaith over 11 years
      Please try to format your code before you ask here. Use ctrl + shift + f to autoformat (in eclipse). Also reduce the amount of code and post only the relevant snippets, if possible.
  • jack
    jack over 11 years
    thanks for ur reply, error went off but getting null pointer exception when i run the app in "String searchString=searchBox.getText().toString();" @Perroloco