如何从json数组类中获取值

时间:2015-08-31 19:56:51

标签: android json

这是我的代码:

 for (int i = 0; i < response.length(); i++) {
    try {
          JSONObject obj = response.getJSONObject(i);
          Movie movie = new Movie();
          movie.setTitle(obj.getString("name")); //get json array name

           }               
            // adding movie to movies array
           movieList.add(movie);

         }

,列表click listener时,我onclick就像这样:

 listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                                long arg3) {
        //update json array name to sqlite

           db.updateUser(XXXXXXXXXXXXXX); // this value i want get from json array movie.setTitle()

            Intent i = new Intent(getApplicationContext(), MainActivity.class);



            startActivity(i);
        }
    });

如何从jsonarray获取值并将其用于onclicklistener?

有人建议使用bean类,但我不确定我是否明白该怎么做..

2 个答案:

答案 0 :(得分:0)

在具有JsonArray

的类中
//create an ivar 
private static Movie myMovie // <- this is the value you want.
// then make a method
public static Moive getMovie(){return MyJSONArrayClass.myMovie}

 // modify your json Class to do this

for (int i = 0; i < response.length(); i++) {
try {
      JSONObject obj = response.getJSONObject(i);
      myMovie = new Movie();
      movie.setTitle(obj.getString("name")); //get json array name

       }               
        // adding movie to movies array
       movieList.add(movie);

     }


// then in the class with the onclick listener do

listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                            long arg3) {
    //update json array name to sqlite

       db.updateUser(XXXXXXXXXXXXXX); // this value i want get from json array movie.setTitle()

        Intent i = new Intent(getApplicationContext(), MainActivity.class);



Movie movie = MyJSONArrayClass.getMovie();
if(null != movie){
 // add your code here
 }

        startActivity(i);
    }
});

如果您不想使用静态

,您还可以查看实现Singleton来为电影提供服务

答案 1 :(得分:0)

在您的第一个代码段中,response变量引用了JSON数组,您显然将其作为网络请求的响应收到。如果您希望适配器能够在该代码的方法返回后继续使用该数据,则需要保留对原始数据的引用,或者您需要复制数据(并将其存储起来)在内存中适配器的生命周期,或以某种方式坚持它。)

在您的第二个代码段中,您似乎只需要电影片段。碰巧在第一个片段中,您在movieList中存储了Movie个对象列表(每个对象都包含一个电影标题)。因此,如果movieList可用于您的第二个代码段,并且Movie类提供了获取电影标题的方式(例如,getTitle()方法),那么您可以执行此操作在你的第二个片段中获取所点击项目的标题:

String movieTitle = movieList.get(position).getTitle();

注意:onItemClick()的第三个参数是所点击项目的位置。另外,我假设movieList的类型与java.util.List<Movie>类似。