Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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;


}
}
like image 839
jack Avatar asked Nov 12 '22 11:11

jack


1 Answers

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.

like image 81
Sebastian Breit Avatar answered Nov 15 '22 04:11

Sebastian Breit



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!