2017-10-14 160 views
-1

我是編程新手,我的當前應用程序只從我的服務器獲取數據,僅用於單個數據並將其輸入到textview中。但現在我已經成功地創建了一個PHP腳本,該腳本編碼具有多個值的JSONArray,但我不知道如何通過循環將值傳遞給android代碼,而且我也不知道如何填充我的listview。JSONArray到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是ListView控件。如果有人可以幫助我如何顯示從服務器到列表視圖的多個數據將是一個非常大的幫助!

回答

0

所以你想從php腳本中獲取json。
使用AsyncDataClass從您的PHP腳本中獲取json,並且當您剛剛接觸編程時,首先閱讀有關AsyncDataClass的內容,然後嘗試使用Log.d(「」,「」)打印從腳本中獲取的json,然後繼續執行下一步。

+0

我似乎無法使用Asynctask,因爲我正在發佈php查詢的變量,並且響應是上面編碼的查詢。 –

+0

你有一個PHP腳本返回一個JSON數據,對吧? – aditya1508

+0

是的。 '[{「lnumber」:「2」,「violation」:「2」},{「lnumber」:「2」,「violation」:「No Helmet」}]'在這裏。 –

2

1.您的JSON根標籤爲[]。您必須使用JSONArray。它不是JSONObject

2.您的樣品不包含您的JSONObject中的datetime密鑰。

嘗試此

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

適配器

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

活動

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

這可行。但它只顯示textviewResult上JSONArray的最後一個值,違反了「無頭盔」。我需要做的是顯示兩個使用列表視圖,但我不知道如何做一個。關心進一步幫助?順便說一句,謝謝! –

+0

在發佈我的第一條評論之前沒有看到編輯,但我們永遠不要使用日期時間鍵。我現在省略了 –

+0

您應該顯示您的適配器。 – KeLiuyue