Salut a tous,

Voila j'ai un probleme pour afficher les données de ma base sur ma listeView alors dans l'ordre:

Erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
04-23 12:41:07.418: W/System.err(1654): org.json.JSONException: No value for Restaurant_ID
04-23 12:41:07.418: W/System.err(1654): 	at org.json.JSONObject.get(JSONObject.java:355)
04-23 12:41:07.428: W/System.err(1654): 	at org.json.JSONObject.getString(JSONObject.java:515)
04-23 12:41:07.438: W/System.err(1654): 	at fr.app.reserva.RestaurantList.parseJSONData(RestaurantList.java:189)
04-23 12:41:07.488: W/System.err(1654): 	at fr.app.reserva.RestaurantList$getDataTask.doInBackground(RestaurantList.java:138)
04-23 12:41:07.658: W/System.err(1654): 	at fr.app.reserva.RestaurantList$getDataTask.doInBackground(RestaurantList.java:1)
04-23 12:41:07.818: W/System.err(1654): 	at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-23 12:41:07.958: W/System.err(1654): 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-23 12:41:07.958: W/System.err(1654): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-23 12:41:07.968: W/System.err(1654): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-23 12:41:07.998: W/System.err(1654): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-23 12:41:07.998: W/System.err(1654): 	at java.lang.Thread.run(Thread.java:841)
Code Java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
 
public class RestaurantList extends Activity{
 
	// declare view objects
	ImageButton imgNavBack, imgRefresh;
	ListView listRestaurant;
	ProgressBar prgLoading;
	TextView txtAlert;
 
	// declare adapter object to create custom restaurant list
	RestaurantListAdapter rla;
 
	// create arraylist variables to store data from server
	static ArrayList<Long> Restaurant_ID = new ArrayList<Long>();
	static ArrayList<String> Restaurant_nom = new ArrayList<String>();
	static ArrayList<String> Restaurant_image = new ArrayList<String>();
 
	String RestaurantAPI;
	int IOConnect = 0;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.restaurant_list);
 
        // connect view objects and xml id
        imgNavBack = (ImageButton) findViewById(R.id.imgNavBack);
        prgLoading = (ProgressBar) findViewById(R.id.prgLoading);
        listRestaurant = (ListView) findViewById(R.id.listRestaurant);
        txtAlert = (TextView) findViewById(R.id.txtAlert);
        imgRefresh = (ImageButton) findViewById(R.id.imgRefresh);
 
        rla = new RestaurantListAdapter(RestaurantList.this);
 
        // category API url
    	RestaurantAPI = Utils.RestaurantAPI+"?accesskey="+Utils.AccessKey;
 
        // call asynctask class to request data from server
        new getDataTask().execute();
 
        // event listener to handle list when clicked
		listRestaurant.setOnItemClickListener(new OnItemClickListener() {
 
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				// TODO Auto-generated method stub
				// go to menu page
				Intent iMenuList = new Intent(RestaurantList.this, MenuList.class);
				iMenuList.putExtra("restaurant_id", Restaurant_ID.get(position));
				iMenuList.putExtra("restaurant_name", Restaurant_nom.get(position));
				startActivity(iMenuList);
			}
		});
 
		// event listener to handle refresh button when clicked
		imgRefresh.setOnClickListener(new OnClickListener() {
 
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				// re-request data from server by calling asynctask class
				IOConnect = 0;
				listRestaurant.invalidateViews();
    			clearData();
				new getDataTask().execute();
			}
		});
 
		// event listener to handle back button when clicked
        imgNavBack.setOnClickListener(new OnClickListener() {
 
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				// go back to previous page
				finish();
			}
		});
 
    }
 
    // clear arraylist variables before used
    void clearData(){
    	Restaurant_ID.clear();
    	Restaurant_nom.clear();
    	Restaurant_image.clear();
    }
 
    // asynctask class to handle parsing json in background
    public class getDataTask extends AsyncTask<Void, Void, Void>{
 
    	// show progressbar first
    	getDataTask(){
    		if(!prgLoading.isShown()){
    			prgLoading.setVisibility(0);
				txtAlert.setVisibility(8);
    		}
    	}
 
		@Override
		protected Void doInBackground(Void... arg0) {
			// TODO Auto-generated method stub
			// parse json data from server in background
			parseJSONData();
			return null;
		}
 
		@Override
		protected void onPostExecute(Void result) {
			// TODO Auto-generated method stub
			// when finish parsing, hide progressbar
			prgLoading.setVisibility(8);
 
			// if internet connection and data available show data on list
			// otherwise, show alert text
			if((Restaurant_ID.size() > 0) && (IOConnect == 0)){
				listRestaurant.setVisibility(0);
				listRestaurant.setAdapter(rla);
			}else{
				txtAlert.setVisibility(0);
			}
		}
    }
 
    // method to parse json data from server
    public void parseJSONData(){
 
    	clearData();
 
    	try {
    		// request data from Category API
	        HttpClient client = new DefaultHttpClient();
			HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);
			HttpConnectionParams.setSoTimeout(client.getParams(), 15000);
	        HttpUriRequest request = new HttpGet(RestaurantAPI);
			HttpResponse response = client.execute(request);
			InputStream atomInputStream = response.getEntity().getContent();
			BufferedReader in = new BufferedReader(new InputStreamReader(atomInputStream));
 
	        String line;
	        String str = "";
	        while ((line = in.readLine()) != null){
	        	str += line;
	        }
 
	        // parse json data and store into arraylist variables
			JSONObject json = new JSONObject(str);
			JSONArray data = json.getJSONArray("data");
 
			for (int i = 0; i < data.length(); i++) {
			    JSONObject object = data.getJSONObject(i); 
 
			    JSONObject restaurant = object.getJSONObject("Restaurant");
 
			    Restaurant_ID.add(Long.parseLong(restaurant.getString("Restaurant_ID")));
			    Restaurant_nom.add(restaurant.getString("Restaurant_nom"));
			    Restaurant_image.add(restaurant.getString("Restaurant_image"));
			    Log.d("Restaurant nom", Restaurant_nom.get(i));
 
			}
 
 
		} catch (MalformedURLException e) {
		    // TODO Auto-generated catch block
		    e.printStackTrace();
		} catch (IOException e) {
		    // TODO Auto-generated catch block
			IOConnect = 1;
		    e.printStackTrace();
		} catch (JSONException e) {
		    // TODO Auto-generated catch block
		    e.printStackTrace();
		}	
    }
 
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	rla.imageLoader.clearCache();
    	listRestaurant.setAdapter(null);
    	super.onDestroy();
    }
 
 
    @Override
	public void onConfigurationChanged(final Configuration newConfig)
	{
	    // Ignore orientation change to keep activity from restarting
	    super.onConfigurationChanged(newConfig);
	}	
}


Sa c'est mon API
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
<?php
	include_once('../includes/connect_database.php'); 
	include_once('../variables/variables.php');
 
	if(isset($_GET['accesskey'])) {
		$access_key_received = $_GET['accesskey'];
 
		if($access_key_received == $access_key){
			// get all restaurant data from Restaurant table
			$sql_query = "	SELECT Restaurant_nom, Restaurant_image 
							FROM tbl_restaurant 
							ORDER BY Restaurant_ID DESC";
 
			$result = $connect->query($sql_query) or die ("Error :".mysql_error());
 
			$restaurants = array();
			while($restaurant = $result->fetch_assoc()) {
				$restaurants[] = array('Restaurant'=>$restaurant);
			}
 
			// create json output
			$output = json_encode(array('data' => $restaurants));
		}else{
			die('accesskey is incorrect.');
		}
	} else {
		die('accesskey is required.');
	}
 
	//Output the output.
	echo $output;
 
	include_once('../includes/close_database.php'); 
?>
Je ne vois pas d'ou vient le problème
Bien sur voici le txtAlert : Contenu indisponible sur le serveur:
alors que dans ma base j'ai bien des données.
!


Voici la ligne dans mon manifest:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
     <activity
            android:name="fr.app.reserva.RestaurantList" 
            android:screenOrientation="portrait"/>