问:我有一个应用程序,其中只有一个活动(主要活动),主要活动的布局XML只有
列表视图。这个应用程式会将餐厅带到我所在地附近,并在清单检视中显示。
我需要做的是将按钮添加到主活动布局中,当我按下按钮时,
从json文件中逐项获取餐厅列表,并在列表视图中显示它,但一键不显示所有餐厅,而是逐项显示
每次点击即可获得餐厅。
假设我有一个JSON文件3间餐厅
,当我在按钮的第一次点击单击让我的第一家餐厅
,当我在按钮第二次点击单击让我第二家餐厅
当我点击按钮,第三次点击误会我的第三个餐厅
如何自定义此代码接受从json文件中逐个餐厅获取项目
我的代码包括类和活动,并且代码运行成功
我的类是FoursquareVenue
package com.foodsmap_project_app.foodsmap_project_app;
public class FoursquareVenue
{
private String name;
private String city;
private String category;
public FoursquareVenue() {
this.name = "";
this.city = "";
this.setCategory("");
}
public String getCity() {
if (city.length() > 0) {
return city;
}
return city;
}
public void setCity(String city) {
if (city != null) {
this.city = city.replaceAll("\\(", "").replaceAll("\\)", "");
;
}
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
MainActivity.java
public class MainActivity extends ListActivity {
ArrayList<FoursquareVenue> venuesList;
final String CLIENT_ID = "SVIBXYYXOEARXHDI4FWAHXGO5ZXOY204TCF1QJFXQLY5FPV4";
final String CLIENT_SECRET = "BAAJO1KXRWESGTJJGVON4W3WUFHAQDAJPLRIYJJ5OPHFQ5VI";
final String latitude = "30.435665153239377";
final String longtitude = "31.3280148";
ArrayAdapter <String> myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new fourquare().execute();
}
private class fourquare extends AsyncTask<View, Void, String> {
String temp;
@Override
protected String doInBackground(View... urls) {
temp = makeCall("https://api.foursquare.com/v2/venues/search?client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&v=20130815&ll=30.435665153239377,31.144435908398464" + "&query=resturant");
return "";
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String result) {
if (temp == null) {
} else {
venuesList = (ArrayList<FoursquareVenue>) parseFoursquare(temp);
List<String> listTitle = new ArrayList<String>();
for (int i = 0; i < venuesList.size(); i++) {
listTitle.add(i, venuesList.get(i).getName() + ", " + venuesList.get(i).getCategory() + "" + venuesList.get(i).getCity());
}
myAdapter = new ArrayAdapter<String>(MainActivity.this, R.layout.row_layout, R.id.listText, listTitle);
setListAdapter(myAdapter);
}
}
}
public static String makeCall(String url) {
StringBuffer buffer_string = new StringBuffer(url);
String replyString = "";
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(buffer_string.toString());
try {
HttpResponse response = httpclient.execute(httpget);
InputStream is = response.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(20);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
replyString = new String(baf.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
return replyString.trim();
}
private static ArrayList<FoursquareVenue> parseFoursquare(final String response) {
ArrayList<FoursquareVenue> temp = new ArrayList<FoursquareVenue>();
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.has("response")) {
if (jsonObject.getJSONObject("response").has("venues")) {
JSONArray jsonArray = jsonObject.getJSONObject("response").getJSONArray("venues");
for (int i = 0; i < jsonArray.length(); i++) {
FoursquareVenue poi = new FoursquareVenue();
if (jsonArray.getJSONObject(i).has("name")) {
poi.setName(jsonArray.getJSONObject(i).getString("name"));
if (jsonArray.getJSONObject(i).has("location")) {
if (jsonArray.getJSONObject(i).getJSONObject("location").has("address")) {
if (jsonArray.getJSONObject(i).getJSONObject("location").has("city")) {
poi.setCity(jsonArray.getJSONObject(i).getJSONObject("location").getString("city"));
}
if (jsonArray.getJSONObject(i).has("categories")) {
if (jsonArray.getJSONObject(i).getJSONArray("categories").length() > 0) {
if (jsonArray.getJSONObject(i).getJSONArray("categories").getJSONObject(0).has("icon")) {
poi.setCategory(jsonArray.getJSONObject(i).getJSONArray("categories").getJSONObject(0).getString("name"));
}
}
}
temp.add(poi);
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<FoursquareVenue>();
}
return temp;
}
}
答:只需使用初始值为零的计数器,并在单击按钮时将其递增即可。从列表中获取带有索引号的值作为计数器。