Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Geocoder getfromlocationName应用程序崩溃_Java_Android - Fatal编程技术网

Java Geocoder getfromlocationName应用程序崩溃

Java Geocoder getfromlocationName应用程序崩溃,java,android,Java,Android,我正在尝试创建一个简单的函数,在其中可以从邮政编码中查找信息。在下面提供的代码中,如果我输入有效的邮政编码,它将完全工作。但当我输入错误的邮政编码时,问题就开始了。我尝试使用语句try-catch,但没有显示错误,整个应用程序崩溃。我也想知道如何限制搜索只在英国。在通过邮政编码查找地址而不是使用getfromlocationName函数时,有没有更好的选择 public void finder(String query){ Geocoder geocoder; List&

我正在尝试创建一个简单的函数,在其中可以从邮政编码中查找信息。在下面提供的代码中,如果我输入有效的邮政编码,它将完全工作。但当我输入错误的邮政编码时,问题就开始了。我尝试使用语句try-catch,但没有显示错误,整个应用程序崩溃。我也想知道如何限制搜索只在英国。在通过邮政编码查找地址而不是使用getfromlocationName函数时,有没有更好的选择

public void finder(String query){
      Geocoder geocoder;
      List<Address> addresses = new ArrayList<Address>();
      geocoder = new Geocoder(this, Locale.getDefault());

      try {
          //addresses = geocoder.getFromLocation(51.283973, 1.064928, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
          addresses = geocoder.getFromLocationName(query,1);
      } catch (Exception e) {

          Toast.makeText(MainActivity.this, "Fail " + e.getMessage(), Toast.LENGTH_SHORT).show();
      }

      String street = addresses.get(0).getThoroughfare();
      Log.i("I0",street);


      String city = addresses.get(0).getLocality();
      Log.i("I1",city);

      String county = addresses.get(0).getSubAdminArea();
      Log.i("I2",county);

      String country = addresses.get(0).getCountryName();
      Log.i("I3",country);
      String postalCode = addresses.get(0).getPostalCode();
      Log.i("I4",postalCode);

      display.setText(street + "\n" + city + "\n" + country + "\n" + postalCode  ); }
我试过了

if(addresses != null && addresses.size() > 0) {

          String street = addresses.get(0).getThoroughfare();
          Log.i("I0", street);


          String city = addresses.get(0).getLocality();
          Log.i("I1", city);

          String county = addresses.get(0).getSubAdminArea();
          Log.i("I2", county);

          String country = addresses.get(0).getCountryName();
          Log.i("I3", country);
          String postalCode = addresses.get(0).getPostalCode();
          Log.i("I4", postalCode);

          display.setText(street + "\n" + city + "\n" + country + "\n" + postalCode);
      }
      else{
          Toast.makeText(MainActivity.this, "No Results Found", Toast.LENGTH_SHORT).show();
      }
还是一样的问题

我现在已经编辑了代码

public void finder(String query){
      Geocoder geocoder;
      List<Address> addresses = new ArrayList<Address>();
      geocoder = new Geocoder(this, Locale.getDefault());

      try {
          //addresses = geocoder.getFromLocation(51.283973, 1.064928, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
          addresses = geocoder.getFromLocationName(query,1);
      } catch (Exception e) {

          Toast.makeText(MainActivity.this, "Fail " + e.getMessage(), Toast.LENGTH_SHORT).show();
      }

      Log.i("yes",addresses.size() + "");

      if(addresses != null && addresses.size() > 0) {
          Log.i("yes","checked");

          String street = addresses.get(0).getThoroughfare();
          Log.i("I0", street);


          String city = addresses.get(0).getLocality();
          Log.i("I1", city);

          String county = addresses.get(0).getSubAdminArea();
          Log.i("I2", county);

          String country = addresses.get(0).getCountryName();
          Log.i("I3", country);
          String postalCode = addresses.get(0).getPostalCode();
          Log.i("I4", postalCode);

          display.setText(street + "\n" + city + "\n" + country + "\n" + postalCode);
      }
      else{
          Toast.makeText(MainActivity.this, "No Results Found", Toast.LENGTH_SHORT).show();
      }


  }

您应该首先检查阵列的大小

if(addresses.size() > 0){
    String street = addresses.get(0).getThoroughfare();
          Log.i("I0",street);


          String city = addresses.get(0).getLocality();
          Log.i("I1",city);

          String county = addresses.get(0).getSubAdminArea();
          Log.i("I2",county);

          String country = addresses.get(0).getCountryName();
          Log.i("I3",country);
          String postalCode = addresses.get(0).getPostalCode();
          Log.i("I4",postalCode);

          display.setText(street + "\n" + city + "\n" + country + "\n" + postalCode  ); 
}

您正试图从索引0获取数据,但您的列表为空。

此行是geocoder.getFromLocationNamequery,1;返回了一个空列表。这可能是因为未找到匹配项,或者根据,没有可用的后端服务。您应该检查地址是否正确!=在对列表执行操作之前,null&&addresses.size>0为真。

如前所述,不要假设Geocoder.getFromLocationName始终返回结果。它可以返回一个空数组

此外:

Address.getLocation、Address.getAdminArea等可以返回null。你得检查一下。 不要假设Address.getAddressLineint中的行数。检查实际返回的Address.getMaxAddressLineIndex行数。
我也遇到了同样的问题,然后我在开始时声明了一个带有默认值的变量,因此,如果请求有答案,您将覆盖该变量,否则将返回默认值。在这种情况下,你可以简单地写一些不正确的工作,请再试一次或类似的事情

   fun getCountryCodeFromName(locationName: String = "California"): String {
    var postalCode:String = "00000"
    try {
        if (find(locationName).size !=0)
           countryCode = cityNameReq(locationName)[0].postalCode

    } catch (e: Exception) {
        resultMessage = Resources.getSystem().getString(R.string.catch_me)
        Log.e(TAG, resultMessage, e)
    }

    return postalCode
}
基本上

                         `var postalCode:String = "00000"` 
如果程序未转到try块并捕获异常,将返回

如果请求成功,postalCode将获得分配给它的新值,如此行所示:

      countryCode = cityNameReq(locationName)[0].postalCode

PS:我知道发问者已经迟到了,但我将我的答案发送给那些可能仍有此问题并正在寻找答案的人:

我仍然尝试了相同的问题,请参见上文我添加了代码首先,告诉我你的应用程序在检查后崩溃了吗?我怎么知道?你在查询中传递的是什么?它正在检查条件,因为我通过了此行日志。是的,检查了;在条件和b4崩溃后,它立即显示在输入错误的邮政编码后已检查。我仍然尝试了相同的问题请参见上文我添加了代码扫描我看到错误日志了吗?如果它们与之前相同,请发送此行“在com.example.mandeep.testing.MainActivity.finderMainActivity.java:85”或代码更改后的任何一行。您可以发送此行MainActivity吗‌​.爪哇:85?MainActivity中崩溃的行。我添加了新代码,上面有错误,请检查
                         `var postalCode:String = "00000"` 
      countryCode = cityNameReq(locationName)[0].postalCode