将JSON值从Integer转换为String

时间:2015-12-15 16:58:20

标签: java android arraylist

我正在使用AsyncTask连接到以下网址:

https://api.themoviedb.org/3/movie/upcoming?api_key=6572f232190d6b55ec917726dab87783

我遇到麻烦的一个值是genre_id。由于它是JSONArray,我将值添加到ArrayList。然后我想将这些值转换为字符串对应关系,可以在这里找到:

http://api.themoviedb.org/3/genre/movie/list?api_key=6572f232190d6b55ec917726dab87783

// Genre is json array
JSONArray genreArry = obj.getJSONArray("genre_ids");
ArrayList<Integer> genre = new ArrayList<Integer>();
for (int j = 0; j < genreArry.length(); j++) {

    genre.add(genreArry.optInt(j));

}

我只是想知道最好的方法是什么?我正在显示所有信息的ListView,并且对于每一行,所有信息都是正确的。我只需要将Genre id转换为相应的String。我已经尝试了下面的代码,但TextView始终被最后一个值覆盖。有谁知道更好的方法吗?

  private void getGenre(int genre) {
         for (int i = 0; i < genreList.size(); i++) {

             Log.d("THE", "THE GENRE ADAPTER RETRIEVED IS" + i + genreList.get(i).getId() + genreList.get(i).getName());

             if (genreList.get(i).getId() == genre) {

                 String name = genreList.get(i).getName();
                 mGenre.setText(name);
             }
         }

解决。
我设法通过检查我的AsyncTask的onPostExecute

来实现这一点
try {
    JSONObject json = new JSONObject(result);

    JSONArray movies = json.getJSONArray("results");
    for (int i = 0; i < movies.length(); i++) {

        JSONObject obj = movies.getJSONObject(i);

        //Create Movie Object
        Movie movie = new Movie();

        //get values from JSON
        movie.setTitle(obj.getString("original_title"));
        movie.setPopularity(obj.getString("popularity"));
        movie.setYear(obj.getString("release_date"));
        movie.setThumbnailUrl(obj.getString("poster_path"));
        movie.setOverView(obj.getString("overview"));

        // Genre is json array
        JSONArray genreArry = obj.getJSONArray("genre_ids");
        ArrayList<Integer> genre = new ArrayList<Integer>();
        ArrayList<String> genreName = new ArrayList<String>();
        for (int j = 0; j < genreArry.length(); j++) {

            genre.add(genreArry.optInt(j));

            for (int zz = 0; zz < myGenreList.size(); zz++) {

                if (myGenreList.get(zz).getId() == genre.get(j)) {

                    String name = myGenreList.get(zz).getName();
                    genreName.add(name);
                }
            }
        }

        movie.setGenre(genre);
        movie.setGenreName(genreName);

1 个答案:

答案 0 :(得分:1)

为了简单起见,我更喜欢Volley而不是AsyncTask,但我们非常欢迎您使用它们。注意,AsyncTask需要更多的工作。

根据我在此处提供的内容,您应该能够在构建ListView项目XML后获取我的屏幕截图。

我松散地跟着this guide快速开始。

<强>截图

Screenshot

Movie.java - 模型对象

public class Movie {

    private int id;
    private String title;
    private List<String> genres;

    public Movie() {
        this(-1, null);
    }

    public Movie(int id, String title) {
        this.id = id;
        this.title = title;
        this.genres = new ArrayList<String>();
    }

    public void addGenre(String s) {
        this.genres.add(s);
    }

    public String getTitle() {
        return title;
    }

    public List<String> getGenres() {
        return genres;
    }
}

MovieAdapter.java - ListView适配器

public class MovieAdapter extends ArrayAdapter<Movie> {

    private final int layoutId;

    public MovieAdapter(Context context, List<Movie> objects) {
        super(context, 0, objects);
        layoutId = R.layout.item_movie;
    }

    private static class ViewHolder {
        TextView title;
        TextView genres;
    }

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

        Movie movie = getItem(position);

        ViewHolder viewHolder; // view lookup cache stored in tag
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(layoutId, parent, false);
            viewHolder.title = (TextView) convertView.findViewById(R.id.movie_title);
            viewHolder.genres = (TextView) convertView.findViewById(R.id.movie_genres);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // Populate the data into the template view using the data object
        viewHolder.title.setText(movie.getTitle());
        viewHolder.genres.setText(String.valueOf(movie.getGenres()));
        // Return the completed view to render on screen
        return convertView;
    }
}

<强> MainActivity.java

public class MainActivity extends Activity {

    private static final String GENRES_URL = "http://api.themoviedb.org/3/genre/movie/list?api_key=6572f232190d6b55ec917726dab87783";
    private static final String MOVIES_URL = "https://api.themoviedb.org/3/movie/upcoming?api_key=6572f232190d6b55ec917726dab87783";

    private HashMap<Integer, String> genreMap = new HashMap<Integer, String>();

    private List<Movie> movies = new ArrayList<Movie>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lv = (ListView) findViewById(R.id.listView);
        final MovieAdapter movieAdapter = new MovieAdapter(this, movies);
        lv.setAdapter(movieAdapter);

        // Build the genres map
        JsonObjectRequest request1 = new JsonObjectRequest(GENRES_URL, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray genres = response.getJSONArray("genres");

                            for (int i = 0; i < genres.length(); i++) {
                                JSONObject genre = genres.getJSONObject(i);
                                int id = genre.getInt("id");
                                String name = genre.getString("name");
                                genreMap.put(id, name);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },

                new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("Network error", error.getMessage());
                    }
                }
        );
        VolleyApplication.getInstance().getRequestQueue().add(request1);

        JsonObjectRequest request2 = new JsonObjectRequest(MOVIES_URL, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        movieAdapter.clear();
                        try {
                            JSONArray results = response.getJSONArray("results");

                            for (int i = 0; i < results.length(); i++) {

                                JSONObject result = results.getJSONObject(i);

                                int movieId = result.getInt("id");
                                String title = result.getString("original_title");
                                Movie movie = new Movie(movieId, title);

                                JSONArray genreIds = result.getJSONArray("genre_ids");
                                for (int j = 0; j < genreIds.length(); j++) {
                                    int id = genreIds.getInt(j);
                                    String genre = genreMap.get(id);
                                    movie.addGenre(genre);
                                }

                                movieAdapter.add(movie);
                            }

                        } catch (JSONException e) {
                            Log.e("JSONException", e.getMessage());
                        }
                    }
                },

                new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("Network error", error.getMessage());
                    }
                }
        );
        VolleyApplication.getInstance().getRequestQueue().add(request2);


    }

}