Java-Android:getfromLocationName()在地址列表中返回大小0

Java-Android:getfromLocationName()在地址列表中返回大小0,第1张

概述我有一个位置数据库.当我尝试将其转换为坐标时,将其放置在地图上时会出错.我的地址类型地址列表的大小为零.我研究了这个话题.我所有的清单权限均正确.我的手机已连接到互联网.我已经重启了手机.我知道有一个Google问题,解决方案也无济于事.位置准确.请帮忙.这是错误消息:android.

我有一个位置数据库.当我尝试将其转换为坐标时,将其放置在地图上时会出错.我的地址类型地址列表的大小为零.我研究了这个话题.我所有的清单权限均正确.我的手机已连接到互联网.我已经重启了手机.我知道有一个Google问题,解决方案也无济于事.位置准确.请帮忙.

这是错误消息:
android.database.Cursorindexoutofboundsexception:已请求索引0,大小为0

private voID setUpMap()  {    DatabaseHandler db = new DatabaseHandler(this);    Cursor c  = db.fetchAllAddresses();    String place = c.getString(c.getColumnIndex("name"));    Geocoder geocoder = new Geocoder(this, Locale.getDefault());    List<androID.location.Address> addresses = new ArrayList();    try {       addresses = geocoder.getFromLocationname(place,1);    } catch (IOException e) {        e.printstacktrace();    }    androID.location.Address add = addresses.get(0);    double lat = add.getLatitude();    double lng = add.getLongitude();    mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).Title("Marker"));    }

编辑这是fetchAllAddresses()

  public Cursor fetchAllAddresses() {    sqliteDatabase db = this.getWritableDatabase();    Cursor mCursor = db.query(table_CONTACTS, new String[]{ "rowID _ID", KEY_name,},null, null, null,null, null);    if (mCursor != null) {        mCursor.movetoFirst();    }    return mCursor;}

解决方法:

看起来您的光标没有任何结果,并且mCursor.movetoFirst();在这种情况下返回false.

通常,您将需要检查mCursor.movetoFirst();的结果,就好像它返回false一样,您知道您的光标为空.

空光标是一个单独的问题,很难从代码中看出为什么会发生这种情况.

为了在Cursor为空时摆脱Cursorindexoutofboundsexception,这是一种解决方法:

您可以对光标上的getCount()进行检查,以确保它大于零.
另外,请确保关闭游标,否则会发生内存泄漏.

private voID setUpMap()  {    DatabaseHandler db = new DatabaseHandler(this);    Cursor c  = db.fetchAllAddresses();    //check for empty cursor    if (c.getCount() > 0){      String place = c.getString(c.getColumnIndex("name"));      Geocoder geocoder = new Geocoder(this, Locale.getDefault());      List<androID.location.Address> addresses = new ArrayList();      try {         addresses = geocoder.getFromLocationname(place,1);      } catch (IOException e) {         e.printstacktrace();      }      androID.location.Address add = addresses.get(0);      double lat = add.getLatitude();      double lng = add.getLongitude();      mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).Title("Marker"));    }    c.close();  //get rID of memory leak! }
总结

以上是内存溢出为你收集整理的Java-Android:getfromLocationName()在地址列表中返回大小0全部内容,希望文章能够帮你解决Java-Android:getfromLocationName()在地址列表中返回大小0所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1094449.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存