2017-07-18 95 views
0

您好我正在从.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; 
    } 
} 
+0

你要分开所有值由标签(例如“id”,“nombre”)在单个列表中? –

+0

是的,这是我想要的 – Natarr

+0

您将不得不解析它并将其保存在模型对象中。用id,nombre等创建一个模型类作为参数。然后创建一个类对象并使用jsonArray.getJSONObject(i).getString(“id”)为每个参数赋值,然后将该对象添加到arraylist以获得具有单独值的对象列表。 填充时,您可以使用相同的列表在UI上显示 –

回答

1

首先,创建与不同的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(); 
+0

在'for'之后,您将'idList','nombreList'等值赋予哪个值? – Natarr

+0

我的错误,检查更新的答案! –

+0

非常感谢你!现在我明白了做到这一点的方式,再次感谢你! – Natarr