将数据从json对象listview传递到新活动

时间:2017-06-30 14:05:03

标签: java android json listview

我是Android编程的新手,但是我尽可能地学习一些新的东西,我在网站上阅读了很多关于我的问题的东西,但目前看来我有点困惑。我想知道的是如何从我的listview发送数据,我从外部API填充并将项目点击发送到另一个活动,以及新活动如何检索它,例如在一些edittext上设置它...我已经做了一些没有JSON数据的例子,而且相当容易,但由于某些原因,我觉得JSON数据很难。非常感谢任何帮助

public class MainActivity extends AppCompatActivity {
private static final String 
url="https://prokampo.000webhostapp.com/teste.php";

private ProgressDialog dialog;
private List<Item> array = new ArrayList<Item>();
private ListView listView;
private Adapter adapter;

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

    listView = (ListView) findViewById(R.id.list_item);
    adapter = new Adapter(this, array);
    listView.setAdapter(adapter);

    dialog = new ProgressDialog(this);
    dialog.setMessage("Loading...");
    dialog.show();
    sendRequest();

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent i = new Intent(MainActivity.this, DadosLista.class);

            i.putExtra("data", adapter.toString());
            startActivity(i);
        }
    });
}




//Creat volley request obj
private void sendRequest(){
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        hideDialog();
        //parsing json
        for(int i=0;i<response.length();i++){
            try{
                JSONObject obj=response.getJSONObject(i);
                Item item=new Item();
                item.setTitle(obj.getString("title"));
                item.setImage(obj.getString("image"));
                item.setRate(obj.getString("rating"));
                item.setYear(obj.getString("releaseYear"));

                //genre is json array
                 /*   JSONArray genreArray=obj.getJSONArray("genre");
                    ArrayList<String> genre=new ArrayList<String>();
                    for(int j=0;j<genreArray.length();j++){
                        genre.add((String) genreArray.get(j));
                    }
                    item.setGenre(genre);
*/
                //add to array
                array.add(item);
            }catch(JSONException ex){
                ex.printStackTrace();
            }
        }
        adapter.notifyDataSetChanged();
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {

    }
});
    AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}

2 个答案:

答案 0 :(得分:0)

您应该保留用于存储数据的单例模型。这样,您可以在活动之间轻松使用相同的数据。

如果您像这样实现它,则可以将用户在列表中单击的位置传递给下一个活动。在下一个活动中,只需从给定位置的列表中获取项目。

像这样:

public class Model {
private static Model model;
private ArrayList<Item> items;

private Model() {
    items = new ArrayList();
}

public static Model getInstance() {
    if(model == null) model = new Model();
    return model;
}


public ArrayList<Item> getItems() {
    return items;
}

public void setItems(ArrayList<Item> items) {
    this.items = items;
}
}

然后在

中执行此操作,在每个活动中保留一个引用
onCreate() {
    model = Model.getInstance();
}

答案 1 :(得分:0)

在您的商品类

中实施Serializable
public class Item implements Serializable{  
 ...
}

然后更新你的onItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent i = new Intent(MainActivity.this, DadosLista.class);
            i.putExtra("data", array.get(position));
            startActivity(i);
        }
    });

在DadosLista类的onCreate

中检索数据
Item item = (Item) getIntent().getSerializableExtra("data");