INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Jobs

How to get only one restaurant when I press click button one click

How to get only one restaurant when I press click button one click

How to get only one restaurant when I press click button one click

(OP)
I have app in side it only one activity (main activity) and layout XML of main activity have only
list view .this app get restaurants near from my location and display it in list view
What i need to do is add button to the main activity layout when i press on button get to me list of restaurant item by item
from json file and display it in list view but not display all restaurants in one click but show item by item
every click get restaurant
suppose i have 3 restaurant in json file
when i click on button for first click get me first restaurant
when i click on button for second click get me second restaurant
when i click on button for third click get me third restaurant
How to customize this code to accept get item by item restaurant from json file
My code include class and activity and code is working success
my class is 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...=" + 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;

}

}

RE: How to get only one restaurant when I press click button one click

I am not going to try going through your code to examine what you are doing.
But based on what you say...

Quote:

when i press on button get to me list of restaurant item by item from json file
you will need to go beyond your single Activity and single XML Layout approach.

Typically when you select a single item from your ListView you need to set up a setOnItemClickListener to identify which item you selected and then act appropriately on it.

Based on what you initially describe, the ListView layout for the Restaurants will not support the "item-by-item" listing you want to show for that selected Restaurant - and depending on the complexity of each 'item' you might need to use a CustomListAdapter.

There are a lot of tutorials on the web for this type of thing.
Do a Google Search for Android ListView Tutorial and you will find many

Good Luck,
JRB-Bldr


RE: How to get only one restaurant when I press click button one click

(OP)
How can i make button sort the result displayed in listview

RE: How to get only one restaurant when I press click button one click

I am not clear on your layout.
You have a Listview which is displaying the Restaurants.
Typically you just click on the individual Listview item to make the selection and then do whatever via the setOnItemClickListener

But you mention a Button.
Do you also have a Button in addition to the Listview on your Layout?
If you do, I don't see where you define it to your onCreate() method.

Before you begin worrying about sorting the Listview, you need to get the other elements working.
Do as I said before - do a Google Search for Android ListView Tutorial

Good Luck,
JRB-Bldr



RE: How to get only one restaurant when I press click button one click

(OP)
Yes I need to customize code above and i have button
And list view in code above working and get data without any proplem
I dont need to show all items in one time
i need to show item by item(restaurant)
depend on how many time you click button
if you click button three time
i must get list view with three item

RE: How to get only one restaurant when I press click button one click

(OP)
This is Mainactivity.java with button
and i need to allow button to show item by item based on button click
public class MainActivity extends ListActivity {
ArrayList<FoursquareVenue> venuesList;
Button btn;
int clickCount;

// ArrayList<FoursquareVenue> allResults;

List<String> shownResults = new ArrayList<String>();

//final String CLIENT_ID = "1CO3ZGVRFHXUIKWGFGDJBLJS4DNKX25EBR1TVEYSEUOFKCJD";
//final String CLIENT_SECRET = "P24DH3AUZUW4Q3Q1WHLG4HED0WPPMHT4P30TOKG2EFWAJPIJ";
// final String latitude = "30.435665153239377";
// final String longtitude = "31.144435908398464";
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();
btn=(Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{

String name = venuesList.get(clickCount).getName();

String cat = venuesList.get(clickCount).getCategory();

String city = venuesList.get(clickCount).getCity();

shownResults.add(name + "," + "cat" + "" + city);

clickCount++;

myAdapter.notifyDataSetChanged();
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...=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&v=20130815&ll=30.435665153239377,31.144435908398464");
temp = makeCall("https://api.foursquare.com/v2/venues/search?client...=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&v=20130815&ll=30.435665153239377,31.144435908398464" + "&query=resturant");
//public static String URL_GET_Place = "https://api.foursquare.com/v2/venues/search?client...";

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;

}

}

RE: How to get only one restaurant when I press click button one click

Quote (ahm1985 )

And list view in code above working and get data without any problem

And that ListView is showing ALL Restaurants? Correct?
With most ListViews, the individual selection is not done by a separate button, unless you want to do something totally unrelated to the individual contents of the ListView.

Instead doing something related to a single ListView item is done as I indicated - by clicking directly on that Listview item and having the setOnItemClickListener launch the subsequent work.

Quote (ahm1985)

I don't need to show all items in one time. i need to show item by item(restaurant). depend on how many time you click button

Typically your setOnItemClickListener might launch a new Activity with a different Layout.

One way (of many ways) to do what you want would be to have that new layout contain a Button and a EditText (whose Width is set to android:layout_width="wrap_content" & android:editable="false").

When the Button's onClick method was launched it would put an Item's text into the EditText with setText().
When the Button was clicked a 2nd time it would do a EditText.getText() and then add:
1. A CrLf = "\n"; to separate the item lines
2. then a 2nd item to the results
3. and write it back out again with a setText().

And on each subsequent Button clicks it would repeat the process until all items had been displayed.

Note - as I indicated there are a wide variety of ways to display the individual Restaurant's Items on the 2nd layout. This is merely one of them that seems like it corresponds to what you are asking it to do.
Personally I'd have the 2nd layout have its own Listview and show ALL of the selected Restaurant's items, but you indicated that you wanted to incorporate a one-by-one button selection.

Good Luck,
JRB-Bldr

RE: How to get only one restaurant when I press click button one click

I should add that typically what you are describing involved 2 JSON requests.
1. Get ALL Restaurants
2. Get ALL Item info for the single Selected Restaurant

The process does not require that it be done that way, but it is pretty easy if it is.
In that way the 2nd activity works pretty much like the first one, but only getting info on the selected restaurant.

As I indicated, if that is not possible there are a number of other ways to deal with the data.

Good Luck,
JRB-Bldr

RE: How to get only one restaurant when I press click button one click

(OP)
Thank you for reply
I get the idea but i try to implementing that but something need to modify in code to work
my code as following
You could storage the parsed ArrayList, make a global variable for counting the number of times that the button has been clicked.

ArrayList<FoursquareVenue> venuesList;
Button btn;
int clickCount;
// ArrayList<FoursquareVenue> allResults;
List<String> shownResults = new ArrayList<String>();
ArrayAdapter <String> myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new fourquare().execute();
btn=(Button) findViewById(R.id.button);
btn.setonclickListener(new View.onclickListener() {
@Override
public void onclick(View v)
{

String name = venuesList.get(clickCount).getName();
String cat = venuesList.get(clickCount).getCategory();
String city = venuesList.get(clickCount).getCity();
shownResults.add(name + "," + "cat" + "" + city);
clickCount++;

myAdapter.notifyDataSetChanged();

}
});
}

This is my idea only i need to see what wrong in code above

RE: How to get only one restaurant when I press click button one click

I have tried to let you know that your approach is Not going to get you what you want.
You should not be using a Button to get the selected item from your ListView.
Your Button has no way of 'knowing' what ListView item was selected.

Please consider starting over.
Do as I suggest and look at the web references on how to use a ListView to make individual selections. ( do a Google Search for: Android ListView Tutorial )

If you do that you will find something similar to the following:

CODE -->

listLocations = (ListView)findViewById(R.id.listLocations);	
   listLocations.setOnItemClickListener(new OnItemClickListener() {
	public void onItemClick(AdapterView<?> parent, View view,
		int position, long id)   // Individual Selected Item (Restaurant)
		{
                //  Do whatever you want with that individual selected item

                // Now go to a new Activity to get info for selected item
                // In that new Activity use new Layout to display the selected item's info
                Intent myIntent = new Intent(view.getContext(), RestaurantInfo.class);
	            startActivityForResult(myIntent, 0);  
	            finish();
	            overridePendingTransition(0, 0);				
		}
	}); 

Note - there are a couple of ways to pass data from Activity to Activity
1. Pass the data as an "EXTRA" to the launch of the new Activity ( Google for: android activity extra )
2. Put data into a Shared Preference ( Google for: android sharedpreferences tutorial )

Good Luck,
JRB-Bldr

RE: How to get only one restaurant when I press click button one click

Well I have to admit that what I am suggesting is the ONLY way I have gotten things to work as I wanted with ListViews. And I have used it many times.

However I have found a few web references that might address the approach you are trying to take.
http://jmsliu.com/2444/click-button-in-listview-an...

And if you do a Google search for: android listview button onclick
you might find what you want.

Good Luck,
JRB-Bldr

RE: How to get only one restaurant when I press click button one click

(OP)
Thank you for reply and corporate
I solved the problem
1- I declare to global variable
int clickCount=0;
List<String> shownResults = new ArrayList<String>();
2- under button click listener i put
//execute async task
new fourquare().execute();
3- I modify onPostExecute function
protected void onPostExecute(String result) {
if (temp == null) {

} else {

venuesList = (ArrayList<FoursquareVenue>) parseFoursquare(temp);


String name = venuesList.get(clickCount).getName();

String cat = venuesList.get(clickCount).getCategory();

String city = venuesList.get(clickCount).getCity();

shownResults.add(name + "," + "cat" + "" + city);
clickCount++;
myAdapter = new ArrayAdapter<String>(MainActivity.this, R.layout.row_layout, R.id.listText, shownResults);

setListAdapter(myAdapter);

}
}
}

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Resources

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close