android地图 geocoder编码问题

转自:http://www.eoeandroid.com/thread-28636-1-1.html

 

我做一个地图程序,想实现定位地址功能,据我所知,应该是用geocoder这个类进行编码的。但是我运行的时候报SocketException: Address family not supported by protocol这个错误,哪位朋友能帮忙解答一下,感激!$ ?6 s- Z8 c( Y1 y
' ~7 O6 l- G7 b+ @' s; Y
源代码如下:) n; X  L. V# /+ k8 f
public void onCreate(Bundle savedInstanceState)
- S: o; W5 z; ~1 c0 A' `9 M( e) }' U! v! R8 J9 a  P0 d0 }
{
* R3 A; V, p( L' f0 r6 h5 f" w/ p" p- Z6 y0 m
    super.onCreate(savedInstanceState);
0 [5 B4 k, d8 V* J1 I; [; f- l& a& q- T1 j& N
    setContentView(R.layout.main);
1 f/ @# j8 X8 _0 F$ R7 z  J( h& U; X2 ]
    //  从XML布局文件获得MapView对象# {2 C# O" b$ /& l

4 U; y/ X& W+ c: B9 o/ K    MapView mapView = (MapView) findViewById(R.id.mapview);
/ t  D: c7 r" ^! `+ m
+ @9 j' A9 G2 [- D& A5 m$ y* |0 `2 r    //  允许通过触摸拖动地图   
9 _3 X1 {' s' g0 U( I/ o' R) c) Q0 g; ]" R/ U6 d7 L
    mapView.setClickable(true);
. q# G, E8 m$ b* c6 y  x$ x% q2 ]9 S% J
    //  当触摸地图时在地图下方会出现缩放按钮,几秒后就会消失
* s3 |; V" m. D# {
3 t  Q2 U$ J% x& f3 P* j6 }7 c    mapView.setBuiltInZoomControls(true);
& f. U9 D; s, ^0 }% O# r+ p
/ l  t7 v7 W1 t    //  获得MapController对象,mapController是一个在类中定义的MapController类型变量3 B- w2 c; r- z
* _; t8 b$ T3 R3 c7 z
    mapController = mapView.getController();
3 Y5 B+ l- }& ?- z0 f. n. x5 W, g# t5 a+ // @, i
    //  创建Geocoder对象,用于获得指定地点的地址: X6 E8 m1 P3 B' G7 R( ~
# H6 `& k( T0 }% ~: Q& K/ o4 T( q2 R
    Geocoder gc = new Geocoder(this);
3 D5 T/ d' m( K5 /0 v5 v
& q$ w1 T( N5 }8 D5 t/ R    //  将地图设为Traffic模式
5 }$ g8 i+ m2 P0 z. h7 S" `; ~& L0 V6 l2 }3 w9 x3 ?: ~
    mapView.setTraffic(true);
; C% m2 D$ h8 R6 R
! K7 Y0 Y" }/ K7 f& H- g    try8 E! H, K9 j8 b+ A$ R8 o
  W- `* A' }% }5 @: H# J6 @2 {
    {& W$ L% M, W- g) Y8 O1 M

; ]# }9 A, V# z" C; G        //  查询指定地点的地址
! k+ s, ^6 X0 |0 N8 i: f- Y' b& p$ z* L: n4 A- ?/ q+ `
        List<Address> addresses = gc.getFromLocationName("沈阳三好街", 5);( x4 c( o' u/ p! K' /; q

7 G$ a! p8 z  ]' G2 N$ x9 j        //  根据经纬度创建GeoPoint对象
+ L$ U3 }) L0 _, e7 j2 s7 h, e1 U
$ h$ W: |5 L- J8 G7 r5 n        geoPoint = new GeoPoint(
" H2 }4 v! g" U' ^' o
$ Q! _" W6 p' ?4 |& V( g                (int) (addresses.get(0).getLatitude() * 1E6),6 b- Z; A2 T$ J- @( e1 b" [- b

" l% F. h6 w( A: `9 V( V                (int) (addresses.get(0).getLongitude() * 1E6));3 U. G: t: k: n9 p( i+ T$ Q
% T1 h3 r: L! L1 J& q
        setTitle(addresses.get(0).getFeatureName());# C5 u2 A- L) q; {5 f8 ~# Z& y5 P2 K  c

. e6 Z! L' F* ?9 s  S- Q& j    }7 I5 Z% u% u9 `4 l

' f( X, B8 d$ W! ]  ]    catch (Exception e)1 S/ E8 L2 D0 /7 K

" z! o) x& o) k' q, P7 ~8 d9 T    {( I1 H. t+ b' b0 c; h8 y
4 z' a& t( V; Y0 C+ S* G
    }
1 s' s; A6 r4 y, f+ ~
" T! j8 n3 p, i' Z& p    //  创建MyOverlay对象,用于在地图上绘制图形
- ~1 r7 T- _( L* x7 Z  I/ `: }( U4 l: n- H4 D. ], T* M
    MyOverlay myOverlay = new MyOverlay();6 o, _7 m7 q# D" p

2 e/ v' z5 F$ V0 x" q! P  [5 B    //  将MyOverlay对象添加到MapView组件中
1 T4 w! [% k. R. Q. H/ f
6 V# /- R7 T1 H    mapView.getOverlays().add(myOverlay);$ ?/ E( {- o  P& a: ~
3 M6 @; Y6 z/ Q, d
    //  设置地图的初始大小,范围在1和21之间。1:最小尺寸,21:最大尺寸' y$ b  P) L0 P; V. R
: N$ E2 ]7 m* P7 a, z9 t9 u
    mapController.setZoom(20);' @5 m* R. f9 t. C
! b5 D9 /' ?' T
    //  以动画方式进行定位8 ~2 z7 /. `; Q9 y" x) Z3 D

, E& b3 S* k9 e, U" W2 m    mapController.animateTo(geoPoint);% c  `  g! y5 T6 c4 H7 |( o; T2 v
. /* E5 X4 Z& C0 m% J2 J$ F
}4 y0 q* R% ]1 G! l: z, u
! O, A' b; E* x, n$ w& u
//  用于在地图上绘制图形的MyOverlay对象
+ G$ U1 d3 t& g4 _; r; a
/ F# w' J( N& i7 |) Yclass MyOverlay extends Overlay
' E7 f4 s- x3 n, }: Y
3 {) f5 `4 B, p. }# L2 h{9 G( P+ I$ ~/ Q: F

0 W- z1 x+ m0 {" G# ^0 z3 j    @Override
& /3 _2 p$ M# O% J% k
) b; }  R, l$ u/ N$ R. w* B5 l    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)/ S+ ]% B. J1 L' ?# F! d' q
. f, K3 |6 U5 q' m! ^9 X: Z' H2 Q; i
    {8 K8 c/ X+ T. ?& l7 s
  /, M, f& e0 l# V
        Paint paint = new Paint();
) i2 M. M4 o8 p- {* E+ p
. w% J2 ?3 f" f1 Y& p4 n# d        paint.setColor(Color.RED);0 T# D, y1 P5 D" `. D3 l4 m
( T( f# Q4 `5 A. e8 }  W3 Z* x7 P! J
        Point screenPoint = new Point();
# F! `! }' p! o4 }) r
: [8 _/ ?7 J+ B6 o1 d, m        //  将“沈阳三好街”在地图上的位置转换成屏幕的实际坐标+ Z! H3 E9 c, {! W, Q6 Y

; E- e$ d% z' w, {2 `4 [  u; Z        mapView.getProjection().toPixels(geoPoint, screenPoint);( i( R' l! l5 D0 L
/ A4 J4 H8 N; d4 `
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.flag);
9 F6 n4 B3 K- u2 }2 V3 n0 H( e, g3 ]6 k* [' x/ F1 x
        //  在地图上绘制图像+ `& H9 n2 /7 Y4 k
- l6 v  y' j, ?# /* j
        canvas.drawBitmap(bmp, screenPoint.x, screenPoint.y, paint);
1 h" k4 q/ O, ]$ {; x$ y5 M
' ~- R# p# Y+ a4 s6 j        //  在地图上绘制文字
- i* x2 Q+ V! K) X+ z  B9 P$ g6 z' e
        canvas.drawText("三好街",screenPoint.x, screenPoint.y, paint);
0 n( f! J* C4 Q5 {! S  I
7 d$ m& D3 l8 I! r3 s- h) ^        return super.draw(canvas, mapView, shadow, when);
. [: T/ n+ v4 b. T
! U2 Q7 m7 ]( ?6 R7 w    }
" w: o3 y: B9 {1 ?! w" x
8 ]* m. C  j9 s7 A1 g$ v- [}
. H8 O6 l& N: y1 I3 S& H3 |
1 w$ V# [, c" c" l! /3 f9 I/***********************************************4 n) ^/ K* m# i: u
注: geoPoint = new GeoPoint(
8 p  e0 E, [3 S8 R( {( |' q( s% X3 z* E4 y7 e
                (int) (addresses.get(0).getLatitude() * 1E6),
( H/ N# U  r8 V6 E2 Q
- A) t, Y" h* d; N9 O                (int) (addresses.get(0).getLongitude() * 1E6));; P) A/ M  T1 B! [6 J

9 b* a9 }$ d& T9 g& ZmapController.animateTo(geoPoint);
* g9 x5 B5 I. `% z" M1 }6 M+ R
5 h) J. u5 ~  O1 F! M* W" w应该是这里的问题,但是我不知道如何解决。' V+ a% C  F/ E0 ?
*************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值