Android 错误:构造函数地理编码器(上下文、区域设置)未定义

Android 错误:构造函数地理编码器(上下文、区域设置)未定义,android,google-geocoder,android-context,Android,Google Geocoder,Android Context,我想获得城市,但我尝试以下代码,并告诉我“构造地理编码器(SitesAdapter,Locale)是未定义的”,我在这个论坛和其他论坛尝试了许多方法,但我没有找到正确的解决方案。在地理编码器中,什么是正确的上下文(上下文、区域设置) 地理编码器: Geocoder geocoder; List<Address> addresses; geocoder = new Geocoder(SitesAdapter.this, Locale.getDefault()); addresses =

我想获得城市,但我尝试以下代码,并告诉我“构造地理编码器(SitesAdapter,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> {
    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);        

        ...       
    }
}
公共类SitesAdapter扩展了ArrayAdapter{
私有上下文;
公共站点适配器(上下文ctx、int textViewResourceId、列表站点){
超级(ctx、textViewResourceId、站点);
mContext=ctx;
}
@凌驾
公共视图getView(int pos、视图转换视图、视图组父视图){
...
//进城
地理编码器;
列出地址;
geocoder=新的geocoder(mContext,Locale.getDefault());
地址=地理编码器。getFromLocation(lat,lng,1);
字符串city=addresses.get(0).getAddressLine(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();
}
String city=null;
Geocoder gc=新的地理编码器(mContext,Locale.getDefault());

列表祝你好运

谢谢@Pycpik这可以工作,但现在这行地址中出现错误=geocoder.getFromLocation(lat,lng,1);然后我用“null”值初始化变量地址,但是当运行应用程序时,会显示错误并关闭。我提出了这个问题。再次感谢您的帮助。可能是不同的问题。可能设备没有实现地理编码器(它不是AOSP的一部分):检查,或者networkLocator服务有问题:检查。尝试重新启动!
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
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);        

        ...       
    }
}
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();
}