2017-10-14 1 views
-1

Je suis nouveau à la programmation et mon application actuelle obtient des données de mon serveur pour une seule donnée et l'entrée dans la vue texte. Mais maintenant j'ai réussi à créer un script php qui encode JSONArray avec plusieurs valeurs, mais je ne sais pas comment obtenir les valeurs du code android via la boucle et je ne sais pas comment remplir ma listview.JSONArray à Android ListView

Exemple JSON

[{"lnumber":"2","violation":"2"},{"lnumber":"2","violation":"No Helmet"}] 

PHP Script

$result = array(); 
$sql = "SELECT lnumber,violation FROM violators WHERE 
lnumber='".$lnumber."'"; 
$stmt = $con->prepare($sql); 
$stmt->execute(); 
$stmt->bind_result($lnumber, $violation); 
while($stmt->fetch()) 
{ 
$temp = [ 
'lnumber'=>$lnumber, 
'violation'=>$violation 
]; 
array_push($result, $temp); 
} 
echo json_encode($result); 

Comment vais-je recevoir actuellement des données du serveur et l'afficher en utilisant uniquement textview.

Android code

StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      loading.dismiss(); 
      showJSON(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(getViolation.this,error.getMessage().toString(),Toast.LENGTH_LONG).show(); 
       } 
      }); 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 

} 

private void showJSON(String response) 
{ 
    try 
    { 
     String lnumber; 
     String violation; 
     JSONObject jsonObject = new JSONObject(response); 
     JSONArray result = jsonObject.getJSONArray(getConfig.JSON_ARRAY); 
     JSONObject violationData = result.getJSONObject(0); 
     lnumber = violationData.getString(getConfig.KEY_LNUMBER); 
     violation = violationData.getString(getConfig.KEY_VIOLATION); 

     textViewResult.setText("License Number:\t"+lnumber+"\nViolation:\t"+violation); 
    } 

PS: Mon id Listview est listView. Si quelqu'un peut m'aider à afficher plusieurs données du serveur à la liste, cela serait une aide précieuse!

Répondre

0

donc vous voulez récupérer le json du script PHP que vous avez.
utilisez AsyncDataClass pour récupérer json à partir de votre script php et comme vous êtes nouveau à la programmation d'abord lire sur AsyncDataClass, puis essayez d'imprimer le json que vous avez récupéré du script en utilisant Log.d ("", "") puis passez à l'étape suivante .

+0

Je n'arrive pas à utiliser Asynctask car je poste une variable pour la requête php et la réponse est la requête codée ci-dessus. –

+0

Vous avez un script php qui renvoie une donnée json, non? – aditya1508

+0

Oui. '[{" lnumber ":" 2 "," violation ":" 2 "}, {" lnumber ":" 2 "," violation ":" Pas de casque "}]' c'est ici. –

2

1.Votre JSON racine est []. Vous devez utiliser JSONArray. Ce n'est pas JSONObject.

échantillon

2.Votre ne contenait pas datetime clé dans votre JSONObject.

Essayez cette

Databean

public class DataBean { 

/** 
* lnumber : 2 
* violation : 2 
*/ 

private String lnumber; 
private String violation; 

public String getLnumber() { 
    return lnumber; 
} 

public void setLnumber(String lnumber) { 
    this.lnumber = lnumber; 
} 

public String getViolation() { 
    return violation; 
} 

public void setViolation(String violation) { 
    this.violation = violation; 
} 
} 

Adaptateur

public class MyAdapter extends BaseAdapter { 

    private List<DataBean> beanList; 
    private LayoutInflater inflater; 
    private Context context; 

    public MyAdapter() { 
    } 

    public MyAdapter(List<DataBean> beanList, Context context) { 
     this.context = context; 
     this.beanList = beanList; 
     this.inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return beanList == null ? 0 : beanList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return beanList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = inflater.inflate(R.layout.your_layout, null); 
     DataBean dataBean = beanList.get(position); 
     text.setText(dataBean.getLnumber() + dataBean.getViolation()); 
     return view; 
    } 
} 

Activité

private List<DataBean> beanList = new ArrayList<>(); 
private ListView listView; 

private void showJSON(String response) { 

    listView = (ListView) findViewById(R.id.listview); 
    try { 
     String lnumber; 
     String violation; 
     String datetime; 

     DataBean dataBean = new DataBean(); 
     JSONArray jsonArray = new JSONArray(response); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 
      lnumber = jsonObject.getString("lnumber"); 
      violation = jsonObject.getString("violation"); 
      dataBean.setLnumber(lnumber); 
      dataBean.setViolation(violation); 
      beanList.add(dataBean); 
     } 
     MyAdapter myAdapter = new MyAdapter(beanList,MainActivity.this); 
     listView.setAdapter(myAdapter); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Cela fonctionne. Mais il affiche uniquement la dernière valeur sur le JsonArray sur le textviewResult avec la violation "NO CASQUE". Ce que j'ai besoin de faire est d'afficher les deux en utilisant listview mais je ne sais pas comment faire un. Vous voulez aider plus loin? Btw, merci! –

+0

N'a pas vu la modification avant de poster mon premier commentaire, mais ne parlons jamais de la clé datetime. Je l'ai omis maintenant –

+0

Vous devriez montrer votre adaptateur. – KeLiuyue