2014-11-07 2 views
1

도시를 가져오고 싶지만 다음 코드를 사용하여 "생성자 Geocoder (SitesAdapter, Locale)가 정의되지 않았습니다."라고 표시하고 여러 가지 방법을 시도합니다. 이 포럼과 다른 사람과 나는 올바른 해결책을 찾지 못합니다. Geocoder (Context, Locale)에서 올바른 컨텍스트는 무엇입니까?오류 : 생성자 Geocoder (Context, Locale)가 정의되지 않았습니다.

지오 코더 :

Geocoder geocoder; 
List<Address> addresses; 
geocoder = new Geocoder(SitesAdapter.this, Locale.getDefault()); 
addresses = geocoder.getFromLocation(lat, lng, 1);  
String city= addresses.get(0).getAddressLine(1); 

전체 코드 :

public class SitesAdapter extends ArrayAdapter<StackSite> { 

    public SitesAdapter(Context ctx, int textViewResourceId, List<StackSite> sites) { 
     super(ctx, textViewResourceId, sites); 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     ...   
     //Get our View References 
     TextView tituloTxt = (TextView)row.findViewById(R.id.tituloTxt); 
     TextView fechaTxt = (TextView)row.findViewById(R.id.fechaTxt); 
     TextView magTxt = (TextView)row.findViewById(R.id.magTxt); 
     TextView depthTxt = (TextView)row.findViewById(R.id.depthTxt); 

     String stringlat = this.getItem(pos).getLat(); 
     Double lat = Double.parseDouble(stringlat); 
     String stringlng = this.getItem(pos).getLng(); 
     Double lng = Double.parseDouble(stringlng); 

     String dateUTC = this.getItem(pos).getFecha(); 
     String stringDepth = this.getItem(pos).getDepth(); 
     Double depth = Double.parseDouble(stringDepth);    

     //GET CITY 
     Geocoder geocoder; 
     List<Address> addresses; 
     geocoder = new Geocoder(SitesAdapter.this, Locale.getDefault()); 
     addresses = geocoder.getFromLocation(lat, lng, 1);  
     String city= addresses.get(0).getAddressLine(1);  
     ...         
    }  
} 

UPDATE 최종 코드 - 최초의 솔루션 :

Geocoder geocoder; 
List<Address> addresses = null; 
    geocoder = new Geocoder(mContext, Locale.getDefault()); 
    try { 
     addresses = geocoder.getFromLocation(lat, lng, 1); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
    String city= addresses.get(0).getAddressLine(1); 

로그 캣 - 최초의 솔루션 :

11-07 17:27:32.283: I/StackSites(3808): adapter size = 327 
11-07 17:27:32.303: I/StackSites(3808): getView pos = 0 
11-07 17:27:32.383: W/System.err(3808): java.io.IOException: Service not Available 
11-07 17:27:32.413: W/System.err(3808):  at android.location.Geocoder.getFromLocation(Geocoder.java:136) 
11-07 17:27:32.413: W/System.err(3808):  at com.gestionderiesgos.sismosecuador.SitesAdapter.getView(SitesAdapter.java:101) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.AbsListView.obtainView(AbsListView.java:2271) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.ListView.makeAndAddView(ListView.java:1812) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.ListView.fillDown(ListView.java:687) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.ListView.fillDown(ListView.java:666) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.ListView.fillFromTop(ListView.java:758) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.ListView.layoutChildren(ListView.java:1665) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.AbsListView.onLayout(AbsListView.java:2106) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:953) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.413: W/System.err(3808):  at android.widget.FrameLayout.onLayout(FrameLayout.java:461) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.413: W/System.err(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.423: W/System.err(3808):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1688) 
11-07 17:27:32.423: W/System.err(3808):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1546) 
11-07 17:27:32.423: W/System.err(3808):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1451) 
11-07 17:27:32.423: W/System.err(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.423: W/System.err(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.433: W/System.err(3808):  at android.widget.FrameLayout.onLayout(FrameLayout.java:461) 
11-07 17:27:32.433: W/System.err(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.433: W/System.err(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.433: W/System.err(3808):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1872) 
11-07 17:27:32.433: W/System.err(3808):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1693) 
11-07 17:27:32.433: W/System.err(3808):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
11-07 17:27:32.443: W/System.err(3808):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4218) 
11-07 17:27:32.443: W/System.err(3808):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
11-07 17:27:32.443: W/System.err(3808):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
11-07 17:27:32.443: W/System.err(3808):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
11-07 17:27:32.443: W/System.err(3808):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
11-07 17:27:32.443: W/System.err(3808):  at android.os.Handler.handleCallback(Handler.java:615) 
11-07 17:27:32.443: W/System.err(3808):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-07 17:27:32.443: W/System.err(3808):  at android.os.Looper.loop(Looper.java:137) 
11-07 17:27:32.443: W/System.err(3808):  at android.app.ActivityThread.main(ActivityThread.java:4744) 
11-07 17:27:32.443: W/System.err(3808):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-07 17:27:32.443: W/System.err(3808):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-07 17:27:32.453: W/System.err(3808):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-07 17:27:32.453: W/System.err(3808):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-07 17:27:32.453: W/System.err(3808):  at dalvik.system.NativeStart.main(Native Method) 
11-07 17:27:32.453: D/AndroidRuntime(3808): Shutting down VM 
11-07 17:27:32.453: W/dalvikvm(3808): threadid=1: thread exiting with uncaught exception (group=0x41959318) 
11-07 17:27:32.463: E/AndroidRuntime(3808): FATAL EXCEPTION: main 
11-07 17:27:32.463: E/AndroidRuntime(3808): java.lang.NullPointerException 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at com.gestionderiesgos.sismosecuador.SitesAdapter.getView(SitesAdapter.java:106) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.AbsListView.obtainView(AbsListView.java:2271) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.ListView.makeAndAddView(ListView.java:1812) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.ListView.fillDown(ListView.java:687) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.ListView.fillDown(ListView.java:666) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.ListView.fillFromTop(ListView.java:758) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.ListView.layoutChildren(ListView.java:1665) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.AbsListView.onLayout(AbsListView.java:2106) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:953) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.FrameLayout.onLayout(FrameLayout.java:461) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1688) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1546) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1451) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.widget.FrameLayout.onLayout(FrameLayout.java:461) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.View.layout(View.java:13879) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewGroup.layout(ViewGroup.java:4472) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1872) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1693) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4218) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.os.Handler.handleCallback(Handler.java:615) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.os.Looper.loop(Looper.java:137) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at android.app.ActivityThread.main(ActivityThread.java:4744) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-07 17:27:32.463: E/AndroidRuntime(3808):  at dalvik.system.NativeStart.main(Native Method) 
11-07 17:27:34.875: I/Process(3808): Sending signal. PID: 3808 SIG: 9 

답변

1

는 코드 문제를 해결하려면 다음

String city = null; 
Geocoder gc = new Geocoder(mContext, Locale.getDefault());  
List<Address> list; 
try { 
    list = gc.getFromLocation(lat, lng,1); 
    if (list != null && list.size() > 0) { 
     Address address = list.get(0); 
     city = address.getAdminArea(); 
    } 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

sample을 확인할 수 있습니다. 행운을 빌어 요

0

Context을 첫 번째 매개 변수로 사용해야합니다 (Activity 일 수 있음). 당신은 하나의 어댑터 생성자를 전달했습니다. 로컬 변수에 추가하고 지오 코더에 사용하기 만하면됩니다. 내가 할 수있는

public class SitesAdapter extends ArrayAdapter<StackSite> { 
    private Context mContext; 

    public SitesAdapter(Context ctx, int textViewResourceId, List<StackSite> sites) { 
     super(ctx, textViewResourceId, sites); 
     mContext = ctx; 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     ... 
     //GET CITY 
     Geocoder geocoder; 
     List<Address> addresses; 
     geocoder = new Geocoder(mContext, Locale.getDefault()); 
     addresses = geocoder.getFromLocation(lat, lng, 1);  
     String city= addresses.get(0).getAddressLine(1);   

     ...  
    } 
} 
+0

감사합니다 @ Pycpik이 작동하지만 지금은이 줄에 오류가 나타납니다. address = geocoder.getFromLocation (lat, lng, 1); 그리고 1 수정 "서라운드와 시도/잡기"보여 다음 변수 값을 "null"값으로 초기화했지만 응용 프로그램을 실행하면 오류가 표시되고 닫습니다. 질문에 로그 고양이를 넣었습니다. 도움을 주셔서 감사합니다. –

+0

다른 문제 일 수 있습니다. 장치가 지오 코더 (AOSP의 일부가 아님)를 구현하지 않은 것 같습니다. check [here] (http://stackoverflow.com/questions/4761052/why-is-android-geocoder-throwing-a-service-not- available-exception) 또는 networkLocator 서비스의 문제 : [여기] (http://stackoverflow.com/questions/15110528/service-not-available-while-calling-geocoder-getfromlocation)를 확인하십시오. 너무 재부팅 해보십시오! – Pycpik

관련 문제