搜索字符串的hashmap并删除

时间:2015-08-12 12:38:52

标签: android json gridview hashmap iteration

所以我在json响应的gridview中显示图像。

每张图片都有一个json响应,如:

{poster_path=/u1LHo5ObRZA1r8pzSq0OqQ2qlaU.jpg, vote_average=0.0, title=The Beauty Inside, vote_count=0, overview=Woo-Jin changes into a different person when he wakes up. He falls in love with Yi-Soo., id=338729, release_date=2015-08-20}

poster_path包含图片网址。

当poster_path为null时,如:

{poster_path=null, vote_average=0.0, title=The Bad Education Movie, vote_count=0, overview=Mr Wickers and his class go on one final school trip after they finish their GCSEs., id=348296, release_date=2015-08-21}

我想删除Hashmap中的这个项目,如果它包含poster_path = null,那么它不会将该数据加载到我的gridView中。

如何做到这一点?

这是我的活动,它下载并解析json响应:

public class Upcoming extends android.support.v4.app.Fragment {


private static final String KEY_POSITION = "position";
private static final String TAGG = "TMDB Pop Movies";

private static final String apiKey = "MYKEY";
private static final String tmdbURL = "MYURL";

private static final String TAG_MOVIES = "results";
static final String TAG_ID = "id";
static final String TAG_RELEASE = "release_date";
static final String TAG_TITLE = "title";
static final String TAG_POSTER = "poster_path";
static final String TAG_VOTE_AVG = "vote_average";
static final String TAG_VOTE_COUNT = "vote_count";
static final String TAG_OVERVIEW = "overview";
String NumberOfPage = "&page=1";

ArrayList<HashMap<String, String>> mylist;
JSONObject json = null;
JSONArray results = null;

UpcomingGridViewAdapter adapter;
GridView Gridv;
int numberofpagesshown = 0;


private String position;


private OnFragmentInteractionListener mListener;



public static Upcoming newInstance(int position) {
    Upcoming fragment = new Upcoming();
    Bundle args = new Bundle();
    args.putInt(KEY_POSITION, position);

    fragment.setArguments(args);
    return fragment;
}

public Upcoming() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        position = getArguments().getString(KEY_POSITION);

    }

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
     final  View newview = inflater.inflate(R.layout.fragment_upcoming, container, false);



    //Initialize with empty data
    mylist = new ArrayList<HashMap<String, String>>();


    // Start download void
    new DownloadJSON().execute();


    return newview;
}


public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);



    try {
        mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}


public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    public void onFragmentInteraction(Uri uri);
}




// Downloading data asynchronously
private class DownloadJSON extends AsyncTask<String, String, String> {


    @Override
    protected String doInBackground(String... url) {
        json = JSONfunctions.getJSONfromURL(tmdbURL + "/3/movie/upcoming"
                + apiKey + NumberOfPage);

        try {


            // Get the array of movies
            results = json.getJSONArray(TAG_MOVIES);

            // loop through all the movies
            for (int i = 0; i < results.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject r = results.getJSONObject(i);



                    String id = r.getString(TAG_ID);
                    String title = r.getString(TAG_TITLE);
                    String poster = r.getString(TAG_POSTER); 
                    String release = r.getString(TAG_RELEASE);
                    String vote = r.getString(TAG_VOTE_AVG);
                    String voteCount = r.getString(TAG_VOTE_COUNT);
                    String overview = r.getString(TAG_OVERVIEW);



                    map.put(TAG_ID, id);
                    map.put(TAG_TITLE, title);
                    map.put(TAG_POSTER, poster);
                    map.put(TAG_RELEASE, release);
                    map.put(TAG_VOTE_AVG, vote);
                    map.put(TAG_VOTE_COUNT, voteCount);
                    map.put(TAG_OVERVIEW, overview);



                mylist.add(map);


            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }


    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);

        numberofpagesshown = numberofpagesshown + 1;

        if(numberofpagesshown == 1 ) {

            Gridv = (GridView) getActivity().findViewById(R.id.upcoming_gridlayout);

            adapter = new UpcomingGridViewAdapter(getActivity(), mylist);

            Gridv.setAdapter(adapter);


        }
        else {

            adapter.notifyDataSetChanged();

        }


        // Attach the listener to the AdapterView onCreate
        Gridv.setOnScrollListener(new EndlessScrollListener() {
            @Override
            public void onLoadMore(int page, int totalItemsCount) {
                // Triggered only when new data needs to be appended to the list
                // Append new items to AdapterView

                if (numberofpagesshown == 1) {

                    NumberOfPage = "&page=2";
                    new DownloadJSON().execute();

                } else if (numberofpagesshown == 2) {

                    NumberOfPage = "&page=3";
                    new DownloadJSON().execute();

                } else if (numberofpagesshown == 3) {

                    NumberOfPage = "&page=4";
                    new DownloadJSON().execute();

                } else if (numberofpagesshown == 4) {

                    NumberOfPage = "&page=5";
                    new DownloadJSON().execute();

                } else if (numberofpagesshown == 5) {

                    NumberOfPage = "&page=6";
                    new DownloadJSON().execute();

                }

            }
                });


    }



         }


}

最后是gridView适配器:

public class UpcomingGridViewAdapter extends BaseAdapter {

public boolean pressedMovieItem;

Context context;
ArrayList<HashMap<String, String>> data;


// Will store json data
HashMap<String, String>mylist = new HashMap<>();

public UpcomingGridViewAdapter(Context a, ArrayList<HashMap<String, String>> d) {
    context = a;
    data = d;
}

public int getCount() {
    return data.size();
}

public HashMap<String, String> getItem(int position) {
    return data.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(final int position, View convertView, ViewGroup parent) {

    if (convertView == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.upcoming_grid_item, parent, false);
    }
    final ImageView poster = (ImageView) convertView.findViewById(R.id.upcoming_image);




    mylist = data.get(position);



   final String posterPath = mylist.get("poster_path");


    // set image url correctly
    // sizes for image 45, 92, 154, 185, 300, 500
    final String url = "http://image.tmdb.org/t/p/w185" + posterPath;



    if(mylist.get("poster_path") != "null") {
        // load image url into poster
        Picasso.with(context).load(url).into(poster);
    }
    else{

        // load image url into poster
      //  Picasso.with(context).load(R.drawable.ic_local_movies_black_24dp).into(poster);
        poster.setBackgroundColor(Color.parseColor("#F5F5F5"));
      //  poster.setScaleType(ImageView.ScaleType.CENTER_INSIDE);


    }

  }

2 个答案:

答案 0 :(得分:1)

只需改变你在doInBackground()内的循环就像这样。它只是不会在ArrayList

中添加该节点
for (int i = 0; i < results.length(); i++) 
{
    HashMap<String, String> map = new HashMap<String, String>();
    JSONObject r = results.getJSONObject(i);

    String poster = r.getString(TAG_POSTER); 

    if(poster == null || poster.equals(""))
        continue;

    String id = r.getString(TAG_ID);
    String title = r.getString(TAG_TITLE);
    String release = r.getString(TAG_RELEASE);
    String vote = r.getString(TAG_VOTE_AVG);
    String voteCount = r.getString(TAG_VOTE_COUNT);
    String overview = r.getString(TAG_OVERVIEW);

    map.put(TAG_ID, id);
    map.put(TAG_TITLE, title);
    map.put(TAG_POSTER, poster);
    map.put(TAG_RELEASE, release);
    map.put(TAG_VOTE_AVG, vote);
    map.put(TAG_VOTE_COUNT, voteCount);
    map.put(TAG_OVERVIEW, overview);

    mylist.add(map);           
}

答案 1 :(得分:0)

做了一点修改:

  // loop through all the movies
            for (int i = 0; i < results.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject r = results.getJSONObject(i);

                String poster = r.getString(TAG_POSTER);

                if(poster == null || poster.equals("")|| poster.equals("null"))
                    continue;

                else {

                    String id = r.getString(TAG_ID);
                    String title = r.getString(TAG_TITLE);

                    String release = r.getString(TAG_RELEASE);
                    String vote = r.getString(TAG_VOTE_AVG);
                    String voteCount = r.getString(TAG_VOTE_COUNT);
                    String overview = r.getString(TAG_OVERVIEW);

                    map.put(TAG_ID, id);
                    map.put(TAG_TITLE, title);
                    map.put(TAG_POSTER, poster);
                    map.put(TAG_RELEASE, release);
                    map.put(TAG_VOTE_AVG, vote);
                    map.put(TAG_VOTE_COUNT, voteCount);
                    map.put(TAG_OVERVIEW, overview);

                    mylist.add(map);

                }