Java 将JSON值从整数转换为字符串

Java 将JSON值从整数转换为字符串,java,android,arraylist,Java,Android,Arraylist,我正在使用AsyncTask连接到以下URL: 我遇到的一个问题是类型id。由于它是JSONArray,我将这些值添加到ArrayList中。随后,我想将这些值转换为字符串对应关系,如下所示: //类型是json数组 JSONArray genreArry=obj.getJSONArray(“类型ID”); ArrayList流派=新的ArrayList(); 对于(int j=0;j

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

我遇到的一个问题是类型id。由于它是JSONArray,我将这些值添加到ArrayList中。随后,我想将这些值转换为字符串对应关系,如下所示:

//类型是json数组
JSONArray genreArry=obj.getJSONArray(“类型ID”);
ArrayList流派=新的ArrayList();
对于(int j=0;j
我只是想知道最好的方法是什么?我正在显示所有信息的列表视图,每行的所有信息都是正确的。我只需要将流派id转换成相应的字符串。我尝试了下面的代码,但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);
             }
         }
private void getGenre(int类型){
对于(int i=0;i

已解决。
我通过在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);
试试看{
JSONObject json=新的JSONObject(结果);
JSONArray movies=json.getJSONArray(“结果”);
对于(int i=0;i
为了简单起见,我更喜欢Volley而不是AsyncTask,但是非常欢迎您使用这两种方法。注意,AsyncTask需要做更多的工作

根据我在这里提供的内容,您应该能够在构建ListView项目XML后获得我的屏幕截图

我松松地跟着,以便快速开始

屏幕截图


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;
    }
}
公共类电影{
私有int-id;
私有字符串标题;
私人列表体裁;
公共电影(){
这是(-1,空);
}
公共电影(int-id,字符串标题){
this.id=id;
this.title=标题;
this.genres=新的ArrayList();
}
公共void addgreen(字符串s){
此.genres.add(s);
}
公共字符串getTitle(){
返回标题;
}
公共列表getGenres(){
回归体裁;
}
}

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;
    }
}
公共类电影适配器扩展了ArrayAdapter{
私人最终国际布局;
公共电影适配器(上下文、列表对象){
超级(上下文,0,对象);
layoutId=R.layout.item\u电影;
}
私有静态类视图持有者{
文本视图标题;
文本视图类型;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
Movie Movie=getItem(位置);
ViewHolder ViewHolder;//存储在标记中的视图查找缓存
if(convertView==null){
viewHolder=新的viewHolder();
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机。充气(layoutId,父项,false);
viewHolder.title=(TextView)convertView.findViewById(R.id.movie\u title);
viewHolder.genres=(TextView)convertView.findViewById(R.id.movie\u流派);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
//使用数据对象将数据填充到模板视图中
viewHolder.title.setText(movie.getTitle());
viewHolder.genres.setText(String.valueOf(movie.getGenres());
//返回要在屏幕上渲染的已完成视图
返回视图;
}
}

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);


    }

}
公共类MainActivity扩展活动{
私有静态最终字符串类型\u URL=”http://api.themoviedb.org/3/genre/movie/list?api_key=6572f232190d6b55ec917726dab87783";
私有静态最终字符串\u URL=”https://api.themoviedb.org/3/movie/upcoming?api_key=6572f232190d6b55ec917726dab87783";
私有HashMap genreMap=新HashMap();
private List movies=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv=(ListView)findViewById(R.id.ListView);
最终电影适配器电影适配器=新电影适配器(此为电影);
lv.设置适配器(电影适配器);
//构建类型图
JSONObjectRequest1=新的JsonObjectRequest(类型URL,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
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);


    }

}