Я создаю одно демонстрационное приложение, имеющее контакты всех пользователей в Google mapView. Я получаю данные этих пользователей из одного php-файла на сервере. PHP-файл возвращает мне один JSONArray из JSONObjects, и каждый JSONObject содержит данные отдельного пользователя. я получаю это и определяю местонахождение пользователей и отображаю их на карте.
это выглядит ->
GoogleMapView-> Это !
public class GoogleMapActivity extends MapActivity implements ActionBar {
Button btnOnMapList, btnProfileHome, btnRefresh;
Intent intent;
GoogleMapActivity gMapActi;
private JSONArray jArray;
private JSONObject jFan_Data;
private ItemBean bean;
private FansData fansdata;//reference of FansData class that return me JSONArray
HelloItemizedOverlay itemizedOverlay;//..........
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
btnProfileHome = (Button) findViewById(R.id.btn_profile_home);
btnOnMapList = (Button) findViewById(R.id.btn_list_home);
btnRefresh = (Button) findViewById(R.id.btn_refresh_home);
super.onCreate(savedInstanceState);
setContentView(R.layout.googlemapactivity);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.displayZoomControls(true);
// mapView.setSatellite(true);
/**TG_1 -> Here i write code to get my current location(e.g., through LocationManager)
* after getting location, i write my location`s latitude & longitude into
* shearedPreference */
//geading preference to get my unique id
SharedPreferences myUid=GoogleMapActivity.this.getSharedPreferences("uid", MODE_WORLD_READABLE);
String myId=myUid.getString("myId", "");
Log.i("MyUid", myId);
/**Calling "jFansData" method of "FansData" class, that return me JSONArray that
* have JSONObjects as its elements & each JSONObject is the complete data of one Unique
* Fan Near you. currently i use hard codded lat & lang are
*/
fansdata=new FansData();
jArray=fansdata.jFanDataArray(1000, 12.9716060, 77.5903760, "h9ow0");
System.out.println(jArray.toString());
//to showing fans on map as pins
Drawable drawable = this.getResources().getDrawable(
R.drawable.small_football_icon);
HelloItemizedOverlay itemizedOverlay = new HelloItemizedOverlay(
drawable, getParent());
for(int i=0;i<jArray.length();i++){
try {
jFan_Data=jArray.getJSONObject(i);
//.........Code Showing different ways of How we can convert one double type value into String type!
try {
System.out.println("Normal"+jFan_Data.getDouble("lat"));
Double lat=new Double(jFan_Data.getDouble("lat"));
System.out.println("fm_Dbl_Wpr"+lat);
System.out.println("wpr_toStr"+Double.toString(lat));
System.out.println("wpr_toStr_jFan"+Double.toString(jFan_Data.getDouble("lat")));
Log.i("GeoCd_double", Double.toString(lat));
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//.........
GeoPoint geoPoint = new GeoPoint((int) (jFan_Data.getDouble("lat")* 1E6),
(int) (jFan_Data.getDouble("lang")* 1E6));
// GeoPoint geoPoint = new GeoPoint(jFan_Data.getInt("lat"),jFan_Data.getInt("lang"));
//GeoPoint geoPoint = new GeoPoint((int)(jFan_Data.getInt("lat")*1E6), (int)(jFan_Data.getInt("lang")*1E6));
OverlayItem overlayitem = new OverlayItem(geoPoint, jFan_Data.getString("name"),
jFan_Data.getString("uniqid"));
itemizedOverlay.addOverlay(overlayitem);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
List<Overlay> mapOverlays = mapView.getOverlays();
// Second Overlay
Drawable drawable2 = this.getResources().getDrawable(
R.drawable.small_football_icon_yellow);
HelloItemizedOverlay itemizedOverlay2 = new HelloItemizedOverlay(
drawable2, getParent());
GeoPoint geoPoint4 = new GeoPoint(35410000, 139460000);
OverlayItem overlayItem4 = new OverlayItem(geoPoint4, "Nidhi", "");
itemizedOverlay2.addOverlay(overlayItem4);
GeoPoint geoPoint5 = new GeoPoint((int) (41.51738 * 1E6),
(int) (-0.08186 * 1E6));
OverlayItem overlayItem5 = new OverlayItem(geoPoint5, "Sapan", "");
itemizedOverlay2.addOverlay(overlayItem5);
mapOverlays.add(itemizedOverlay);
mapOverlays.add(itemizedOverlay2);
}
//.........................
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
public void onHomeList(View view) {
Intent in = new Intent(getParent(), MapPinsList.class);
TabGroupActivity prnt = (TabGroupActivity) getParent();
prnt.startChildActivity("MapPinsList", in);
}
@Override
public void onHomeProfile(View view) {
Intent in = new Intent(getParent(), ProfileActivity.class);
TabGroupActivity prnt = (TabGroupActivity) getParent();
prnt.startChildActivity("ProfileActivity", in);
}
@Override
public void onHomeRefresh(View view) {
// TODO Auto-generated method stub
//???????????
//super.onCreate(null);
}
@Override
public void onListMap(View view) {
// TODO Auto-generated method stub
}
@Override
public void onListProfile(View view) {
// TODO Auto-generated method stub
}
}
в этом представлении есть одна панель действий с тремя надписями изображения (обновить, список и профиль).
когда я нажимаю на «Список», он показывает мне mapPins в одном «ListView». У меня есть один адаптер (LazyAdapter расширяет BaseAdapter).
listView-> this !
public class MapPinsList extends ListActivity implements OnItemClickListener,ActionBar {
ListView mFansListView;
JSONArray jArray;//jArray that contains jobjects of all fans. each jobj hv data of 1 unique fan!
JSONObject jFan_Data;//contain data of an indivisual fan
JSONObject jFansData;//contain data of an all fans
//ListViewCustomAdapter adapter;//gc
LazyAdapter adapter;
private ArrayList<Object> fansList;
private ArrayList<String> mStrings ;
private ItemBean bean;
private FansData fansData;
String url="http://192.168.200.111/ManU/";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.on_pins_list_clicks);
prepareArrayLits();
// mFansListView = (ListView) findViewById(R.id.listView1);
mFansListView = (ListView) findViewById(android.R.id.list);
adapter = new LazyAdapter(this, mStrings, fansList);
mFansListView.setAdapter(adapter);// come null pointer exception when no fan data is returned! hendle it...
mFansListView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
// TODO Auto-generated method stub
ItemBean bean = (ItemBean) adapter.getItem(position);
//retrieve MyUniqueId from sheared Preferences
SharedPreferences myUid=MapPinsList.this.getSharedPreferences("uid", MODE_WORLD_READABLE);
String myId=myUid.getString("myId", "");
Toast.makeText(this,"MyUId->"+ myId+"\nFanId => " + bean.getUid() +" \n UID => " + bean.getTitle(), Toast.LENGTH_SHORT).show();
/**from here-> I am going to start one activity that show the complete profile of a
* particular Fan... According to the unique id received from clicking on ListItem!
*/
for(int i=0;i<jArray.length();i++){
try {
JSONObject jFan_Data=jArray.getJSONObject(i);
String fanId=jFan_Data.getString("uniqid");
if(fanId.equals(bean.getUid())){
//New Intent that start new Activity that show Profile of a Fan
Intent in= new Intent(getParent(), FanProfile.class);
TabGroupActivity prnt = (TabGroupActivity) getParent();
Bundle fBundle= new Bundle();
//fBundle.putStringArray("jFanData", jFanData);
fBundle.putString("fanId", fanId);
in.putExtras(fBundle);
prnt.startChildActivity("FanProfile", in);
//startActivity(in);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/** Method used to prepare the ArrayList, Same way, you can also do looping
* and adding object into the ArrayList.
*/
/** Method used to prepare the ArrayList */
public void prepareArrayLits() {
/** I read shearedPreference to get my location`s latitude, longitude &
* myUniqueId */
//......
fansData = new FansData();
//return me array containing data of all fans
jArray = fansData.jFanDataArray(1000, 12.9716060, 77.5903760, "h9ow0");
/**preserving this jArray into preference so that i can recieve it any where
* when i want the data of all fans like in GooglwMapActivity when i tap on pins...
* I store it in the String formate...But when i get it from preference i can
* build one JSONArray by passing this String as parameter as
* SharedPreferences fansData=GoogleMapActivity.this.getShearedPrefrences("jArray",MODE_WORLD_READABLE);
* String jArr=JArray.getString("allFansData","");
* -> new JSONArray(jArr); will return me complete jArray same as that of here in MapPinsList!!!
* */
SharedPreferences fansData = getSharedPreferences("jArray", MODE_WORLD_READABLE);
SharedPreferences.Editor edit = fansData.edit();
edit.putString("allFansData", jArray.toString());
edit.commit();
// ++++++++
try {
//Initializing ArrayList
fansList = new ArrayList<Object>();
mStrings = new ArrayList<String>();
for (int i = 0; i < jArray.length(); i++) {
// will return the data of each row fetched from JSONArray returned by location1.php
String data_of_each_user = jArray.get(i).toString();
Log.i("Data Of User at index " + i + " is", data_of_each_user);
// I put the object at index "i" into JSONObject & retrieve data from name-value pair
jFan_Data = jArray.getJSONObject(i);// data of User at index i
// in array
AddObjectToList(jFan_Data.getString("uniqid").toString(), jFan_Data.getString("name"),
jFan_Data.getString("distance"));
Log.i("URL", url+"images/"+jFan_Data.get("uniqid").toString()+".png");
mStrings.add(url+"images/"+jFan_Data.get("uniqid").toString()+".png");
Log.i("URL....", url+"images/"+jFan_Data.get("uniqid").toString()+".png");
String nm = jFan_Data.get("name").toString();
String uid = jFan_Data.get("uniqid").toString();
String dis = jFan_Data.get("distance").toString();
System.out.println("Your Name: " + nm);
System.out.println("Your Unique Id: " + uid);
System.out.println("Your Distance: " + dis);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// ++++++++++
}
// Add one item into the Array List
public void AddObjectToList(String uid, String title, String desc) {
bean = new ItemBean();
bean.setUid(uid);
bean.setDescription(desc);
bean.setTitle(title);
fansList.add(bean);
}
@Override
public void onHomeList(View view) {
// TODO Auto-generated method stub
}
@Override
public void onHomeProfile(View view) {
// TODO Auto-generated method stub
}
@Override
public void onHomeRefresh(View view) {
// TODO Auto-generated method stub
}
@Override
public void onListMap(View view) {
Intent in = new Intent(getParent(), GoogleMapActivity.class);
TabGroupActivity prnt = (TabGroupActivity) getParent();
prnt.startChildActivity("GoogleMapActivity", in);
}
@Override
public void onListProfile(View view) {
// TODO Auto-generated method stub
Intent in = new Intent(getParent(), ProfileActivity.class);
TabGroupActivity prnt = (TabGroupActivity) getParent();
prnt.startChildActivity("ProfileActivity", in);
}
}
Что мне нужно, так это когда я нажимаю кнопку «Обновить» в этих представлениях, содержимое моей деятельности обновляется! ...
содержимое JSONArray варьируется в зависимости от моего текущего местоположения, и когда я нажимаю кнопку обновления, он снова просматривает мои данные (например, мою текущую LATITUDE & LONGITUDE, расстояние, на которое я хочу видеть пользователей из моего текущего местоположения), я пишу это в onCreate моего класса.
Теперь, как мне обновить содержимое, когда я нажимаю кнопку «Обновить» в этих представлениях ???
Любые предложения, пожалуйста, был бы признателен за любой указатель, пример кода для этого