私は1日問題に悩まされてきましたが、それをどうやって行うのかまだわかりません。AndroidでGoogleマップのガソリンスタンドファインダーアプリを作成しようとしていますが、マップする値とその値を渡す前に、最初に作成することにしListView
ました。Latitude
Longitude
ListView
データベースのデータをに入力することに成功しましたSQLite
が、を適切に使用できないようですOnItemClickListener
。
これが私の問題です...
クリックしたアイテムの値Latitude
と値を渡すことができないようです。Longitude
現在のコードでは、アイテムをクリックするたびにアプリケーションがシャットダウンし、LogCatがjava.lang.ClassCastException : java.lang.Integer
オンラインステーションを提供しますstationList = (Station) list.getItemAtPosition(position);
(OnItemClickListener
コードを参照)。
誰かが私の緯度と経度を渡すのを手伝ってくれListView
ますか?どうぞよろしくお願いします。:)
NearGasActivity
public class NearGasActivity extends Activity{
static final String KEY_NAME = "search"; // parent node
static final String KEY_ID = "id";
static final String KEY_STATNAME = "name";
static final String KEY_STATLOC = "location";
static final String KEY_LATITUDE = "latitude";
static final String KEY_LONGITUDE = "longitude";
LocationManager locationManager;
Location currentLocation = null;
GeoPoint currentPoint;
DatabaseHandler db = new DatabaseHandler(this);
double latPoint;
double lonPoint;
int currLatitude;
ListView list;
LazyAdapter adapter;
List<Station> listOfStations;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nearme);
getLastLocation();
areaList(currentLocation);
}
public void areaList(Location location) {
listOfStations = db.getAllStations();
int currLatitude = (int) (location.getLatitude() * 1e6);
int currLongitude = (int) (location.getLongitude() * 1e6);
double diffLat;
double diffLon;
ArrayList<HashMap<String, String>> searchList = new ArrayList<HashMap<String, String>>();
for (Station b : listOfStations){
if ( b.getStationLocationLat() != null || b.getStationLocationLon() != null ) {
try {
latPoint = Double.parseDouble(b.getStationLocationLat());
lonPoint = Double.parseDouble(b.getStationLocationLon());
} catch (NumberFormatException e) {
}
}
diffLat = Math.abs(currLatitude - (latPoint * 1e6));
diffLon = Math.abs(currLongitude - (lonPoint * 1e6));
/* 2000 measurement units. Made-up. */
if (((diffLat) < 2000) && ((diffLon) < 2000)){
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_ID, b.getStationCode());
map.put(KEY_STATNAME, db.getGasByCode(b.getStationGasCode()).getName());
map.put(KEY_STATLOC, b.getStationLocationDesc());
map.put(KEY_LATITUDE, b.getStationLocationLat());
map.put(KEY_LONGITUDE, b.getStationLocationLon());
songsList.add(map);
}
}
list = (ListView)findViewById(R.id.list);
adapter = new LazyAdapter(this, sList);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Station stationList = (Station) list.getItemAtPosition(position);
double latitude = Double.parseDouble(stationList.getStationLocationLat());
double longitude = Double.parseDouble(stationList.getStationLocationLon());
Toast toast = Toast.makeText(NearGasActivity.this, "Test Message: " + lat, Toast.LENGTH_SHORT);
toast.show();
}
});
}
LazyAdapter
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
TextView name = (TextView)vi.findViewById(R.id.name); // station name
TextView location = (TextView)vi.findViewById(R.id.location); // station location address
TextView latitude = (TextView)vi.findViewById(R.id.latitude);
TextView longitude = (TextView)vi.findViewById(R.id.longitude);
HashMap<String, String> search = new HashMap<String, String>();
search = data.get(position);
// Setting all values in listview
name.setText(search.get(NearGasActivity.KEY_STATNAME));
location.setText(search.get(NearGasActivity.KEY_STATLOC));
latitude.setText(search.get(NearGasActivity.KEY_LATITUDE));
longitude.setText(search.get(NearGasActivity.KEY_LONGITUDE));
return vi;
}
}
前もって感謝します。:)