2016-06-12 90 views
0

我想从json网站获取数据并将其显示在我的android列表视图中,但在我的程序中我只能在listview中看到json的第一个结果,并且不显示所有结果在列表视图中的JSON和我不知道如何检查数组列表的大小。在列表视图中显示所有数据json android

这是我的项目文件: 的Android代码=>http://s7.picofile.com/file/8255498026/Travel.zip.html 和PHP和数据库=>enter link description here 或 这是我的代码

mainactivity代码:

package com.example.delta.travel; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ListAdapter; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends ListActivity { 

private ProgressDialog pd; 
JSONParser jParser=new JSONParser(); 
ArrayList<HashMap<String,String>> P; 
JSONArray s=null; 
private final String url="http://192.168.1.3/upload/travel.php"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
P = new ArrayList<>(); 
new travel().execute(); 

} 

class travel extends AsyncTask<String,Void,String>{ 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pd=new ProgressDialog(MainActivity.this); 
    pd.setMessage("login"); 
    pd.show(); 
} 

@Override 
protected String doInBackground(String... params) { 

    List<NameValuePair> parms=new ArrayList<>(); 
    JSONObject json=jParser.makeHTTPRequest(url,"GET"); 

    try { 
     int t=json.getInt("t"); 
     if(t==1){ 
      s=json.getJSONArray("travel"); 
      for(int i=0;i<s.length();i++){ 
       JSONObject c=s.getJSONObject(i); 
       String companyname=c.getString("companyname"); 
       String cod=c.getString("cod"); 
       String bign=c.getString("bign"); 
       String stop=c.getString("stop"); 
       String date=c.getString("date"); 
       String time=c.getString("time"); 
       String price=c.getString("price"); 

       HashMap<String,String>map=new HashMap<String,String>(); 
       map.put("companyname",companyname); 
       map.put("cod",cod); 
       map.put("bign",bign); 
       map.put("stop",stop); 
       map.put("date",date); 
       map.put("time",time); 
       map.put("price",price); 

       P.add(map); 

      } 
     }else { 
      Toast.makeText(MainActivity.this,"No Data Found",Toast.LENGTH_SHORT).show(); 
     } 


    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
    pd.dismiss(); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      ListAdapter adapter = new SimpleAdapter(MainActivity.this, P, R.layout.item_list, 
        new String[]{"companyname", "cod", "bign", "stop", "date", "time", "price"}, 
        new int[]{R.id.companyname, R.id.cod, R.id.bign, R.id.stop, R.id.date, R.id.time1, R.id.price}); 
      setListAdapter(adapter); 
     } 
    }); 

} 
} 
} 

和我的JSON解析器代码:

package com.example.delta.travel; 

import android.net.http.HttpResponseCache; 
import android.util.Log; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.utils.URLEncodedUtils; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 
import java.util.Date; 
import java.util.List; 

/** 
* Created by delta on 5/28/2016. 
*/ 
public class JSONParser { 

static InputStream is=null; 
static JSONObject jObj=null; 
static String json=""; 

// constructor 
public JSONParser(){ 

} 

// function get json from url 
// by making HTTP POST or GET method 
public JSONObject makeHTTPRequest(String urlString, String method) { 

if(method.equals("POST")){ 

    URL url = null; 
    try { 
     url = new URL(urlString); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Accept", "application/json"); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 
     String output; 
     StringBuilder sb = new StringBuilder(); 
     while ((output = br.readLine()) != null) { 
      sb.append(output); 
     } 
     conn.disconnect(); 
     json = sb.toString(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

}else if(method.equals("GET")){ 
    URL url = null; 
    try { 
     url = new URL(urlString); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 
     String output; 
     StringBuilder sb = new StringBuilder(); 
     while ((output = br.readLine()) != null) { 
      sb.append(output); 
     } 
     conn.disconnect(); 
     json = sb.toString(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

try { 
    jObj = new JSONObject(json); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

return jObj; 
} 
} 

and my ph p代码:

<?php 

$con=mysqli_connect("localhost","root","","travels"); 
mysqli_set_charset($con,"utf8"); 
$response=array(); 


$result=mysqli_query($con,"select * from travel"); 

if(mysqli_num_rows($result)>0){ 
while($row=mysqli_fetch_array($result)){ 
$temp=array(); 
$temp["companyname"]=$row["companyname"]; 
$temp["cod"]=$row["cod"]; 
$temp["bign"]=$row["bign"]; 
$temp["stop"]=$row["stop"]; 
$temp["date"]=$row["date"]; 
$temp["time"]=$row["time"]; 
$temp["price"]=$row["price"]; 

$response["travel"]=array(); 

array_push($response["travel"],$temp); 
$response["t"]=1; 
echo json_encode($response); 

} 



} 
else{ 

$response["t"]=0; 
$response["message"]="Not Found"; 
echo json_encode($response); 

} 
?> 
+0

没人能帮忙吗? – alireza

回答

0

在你的PHP代码中,你已经把“echo json_encode($ response);” while循环内的语句,使其在每次迭代时都能打印出来。它应该在括号后面的循环之外。

+0

我认为你的错误,因为如果我把“echo json_encode($ response);”在括号后显示我只有最后一个结果的JSON和它的不工作 – alireza

+0

我刚才注意到,还声明“$ response [”travel“] = array();”必须在循环之前。如果它在里面,则较早的值将被清除并且仅打印最后一个值。 –

相关问题