从JSON对象中放入变量
问题描述:
您好我正在从.php文件的JSON回声中将测试android应用程序链接到MySQL数据库。从JSON对象中放入变量
我能够用整个数据填充一个ArrayList,但是现在我想将数据分解为变量,并且我无法真正找出方法。
我使用循环J库,使JSON通信
我MainActivity.java 公共类MainActivity扩展AppCompatActivity {
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.lvLista);
getData();
}
public void getData()
{
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://www.kukitosoft.com/android/api.php";
// RequestParams params = new RequestParams();
// params.put("campo", "valor a fitrar");
//Esto iria en el null del client.post
client.post(url, null, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if (statusCode == 200)
{
loadList(getDataJSON(new String(responseBody)));
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
public void loadList(ArrayList<String> data)
{
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
list.setAdapter(adapter);
}
public ArrayList<String> getDataJSON(String response)
{
ArrayList<String> list = new ArrayList<String>();
try
{
JSONArray jsonArray = new JSONArray(response);
String texto;
for(int i=0; i<jsonArray.length(); i++)
{
texto = jsonArray.getJSONObject(i).getString("id") + " " +
jsonArray.getJSONObject(i).getString("nombre") + " " +
jsonArray.getJSONObject(i).getString("descripcion") + " " +
jsonArray.getJSONObject(i).getString("calificacion") + " ";
list.add(texto);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
}
答
首先,创建与不同的getter/setter一个POJO类的必填字段。
public class MyResponse(){
private List<String> idList;
private List<String> nombreList;
private List<String> descList;
private List<String> califList;
public void setIdList(List<String> list){
this.idList = list;
}
public void getIdList(){
return idList;
}
public void setNombreList(List<String> list){
this.nombreList = list;
}
public void getNombreList(){
return nombreList;
}
public void setDescList(List<String> list){
this.descList = list;
}
public void getDescList(){
return descList;
}
public void setCalifList(List<String> list){
this.califList = list;
}
public void getCalifList(){
return califList;
}
}
现在解析每一个响应并加入MyResponse型
public MyResponse getDataJSON(String response)
{
MyResponse myResponse = new MyResponse();
ArrayList<String> idList = new ArrayList<String>();
ArrayList<String> nombreList = new ArrayList<String>();
ArrayList<String> descList = new ArrayList<String>();
ArrayList<String> califList = new ArrayList<String>();
try
{
JSONArray jsonArray = new JSONArray(response);
for(int i=0; i<jsonArray.length(); i++)
{
idList.add(jsonArray.getJSONObject(i).getString("id"));
nombreList.add(jsonArray.getJSONObject(i).getString("nombre"));
descList.add(jsonArray.getJSONObject(i).getString("descripcion"));
califList.add(jsonArray.getJSONObject(i).getString("calificacion"));
}
myResponse.setIdList(idList);
myResponse.setNombreList(nombreList);
myResponse.setDescList(descList);
myResponse.setCalifList(califList);
return myResponse;
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
从检索回数据的列表getDataJSON()
MyResponse myResponse = getDataJSON(new String(responseBody)));
ArrayList<String> idList = myResponse.getIdList();
ArrayList<String> nombreList = myResponse.getNombreList();
ArrayList<String> descList = myResponse.getDescList();
ArrayList<String> califList = myResponse.getCalifList();
你要分开所有值由标签(例如“id”,“nombre”)在单个列表中? –
是的,这是我想要的 – Natarr
您将不得不解析它并将其保存在模型对象中。用id,nombre等创建一个模型类作为参数。然后创建一个类对象并使用jsonArray.getJSONObject(i).getString(“id”)为每个参数赋值,然后将该对象添加到arraylist以获得具有单独值的对象列表。 填充时,您可以使用相同的列表在UI上显示 –