gpt4 book ai didi

java - 地理编码器 getfromlocationName 使应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 02:43:10 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的函数,可以在其中从邮政编码中查找信息。在下面提供的代码中,如果我输入有效的邮政编码,它就可以正常工作。但是当我输入错误的邮政编码时问题就开始了。我尝试使用语句 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 ); }

错误是

07-13 21:15:26.717 10744-10744/com.example.mandeep.testing I/i1: ct3456
07-13 21:15:26.856 10744-10744/com.example.mandeep.testing D/AndroidRuntime: Shutting down VM
07-13 21:15:26.857 10744-10744/com.example.mandeep.testing E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mandeep.testing, PID: 10744
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.example.mandeep.testing.MainActivity.finder(MainActivity.java:85)
at com.example.mandeep.testing.MainActivity$1.onQueryTextSubmit(MainActivity.java:47)
at android.widget.SearchView.onSubmitQuery(SearchView.java:1197)
at android.widget.SearchView.access$900(SearchView.java:92)
at android.widget.SearchView$8.onEditorAction(SearchView.java:1175)
at android.widget.TextView.onEditorAction(TextView.java:4473)
at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:139)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:304)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5219)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
07-13 21:15:26.878 10744-10744/? I/Process: Sending signal. PID: 10744 SIG: 9

我试过了

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


}

现在错误是

07-13 22:21:02.782 32088-32088/com.example.mandeep.testing I/i1: ct28dx
07-13 22:21:02.942 32088-32088/com.example.mandeep.testing I/yes: 1
07-13 22:21:02.942 32088-32088/com.example.mandeep.testing I/yes: checked
07-13 22:21:02.942 32088-32088/com.example.mandeep.testing D/AndroidRuntime: Shutting down VM
07-13 22:21:02.944 32088-32088/com.example.mandeep.testing E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mandeep.testing, PID: 32088
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.i(Log.java:160)
at com.example.mandeep.testing.MainActivity.finder(MainActivity.java:93)
at com.example.mandeep.testing.MainActivity$1.onQueryTextSubmit(MainActivity.java:52)
at android.widget.SearchView.onSubmitQuery(SearchView.java:1197)
at android.widget.SearchView.access$900(SearchView.java:92)
at android.widget.SearchView$8.onEditorAction(SearchView.java:1175)
at android.widget.TextView.onEditorAction(TextView.java:4473)
at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:139)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:304)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5219)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
07-13 22:21:02.973 32088-32088/com.example.mandeep.testing I/Process: Sending signal. PID: 32088 SIG: 9

最佳答案

您应该首先检查数组的大小

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 获取数据,但列表为空。

关于java - 地理编码器 getfromlocationName 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com