2017-10-14 11 views
-1

私はプログラミングに慣れていないし、現在のアプリケーションは自分のサーバーから単一のデータだけのデータを取得し、それをtextviewに入力します。しかし、今私は正常に複数の値でJSONArrayをエンコードするPHPスクリプトを作成したが、私はループを介してアンドロイドコードに値を取得する方法を知っていないと私はまた、私のリストビューを作成する方法を知っていない。JSONArray to Android ListView

サンプルJSON

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

PHPスクリプト

$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); 

どのように私は現在、サーバーからデータを取得し、唯一のTextViewを使用してそれを表示しています。

Androidのコード

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: 私のリストビューIDがリストビューです。誰かがどのようにサーバーからリストビューに複数のデータを表示するのを助けることができる場合は非常に大きな助けになる!

答えて

0

だから、あなたはPHPスクリプトからjsonをフェッチしたいと思います。
AsyncDataClassを使用してPHPスクリプトからjsonをフェッチしてください。プログラミングの初心者であればAsyncDataClassについてまず読んで、Log.d( ""、 "")を使用してスクリプトからフェッチしたjsonを印刷しようとすると次のステップに進みます。

+0

私はPHPクエリの変数を掲示しているので、Asynctaskを使用することはできません。その応答は上記でエンコードされたクエリです。 –

+0

あなたはjsonデータを返すPHPスクリプトを持っていますか? – aditya1508

+0

はい。 {2}、{2}、{2}、{2}、{2}、{2}、{違反ヘルメット}} ' –

2

1. JSONルートタグは[]です。 JSONArrayを使用する必要があります。 JSONObjectではありません。

2. JSONObjectには、サンプルにdatetimeというキーが含まれていませんでした。

活動

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; 
    } 
} 

アダプタこの

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; 
} 
} 

をお試しください

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

これは動作します。しかし、それは違反 "NO HELMET"でtextviewResultのJsonArrayの最後の値だけを表示します。私がする必要があるのは、listviewを使用して両方を表示することですが、私はそれを行う方法はわかりません。さらに手助けをするケア? Btw、ありがとう! –

+0

最初のコメントを投稿する前に編集が表示されませんでしたが、datetimeキーは聞こえません。私は今それを省いた –

+0

あなたのアダプターを表示する必要があります。 – KeLiuyue