2016-07-02 4 views
0

こんにちは私は、編集テキストにユーザーが入力した内容に応じて住所を検索するアプリケーションの中に時のメソッドを作成しました。これは完璧に動作しますが、編集テキストが空のときに検索ボタンを押すとクラッシュします。どのようなことが間違っているのか、どのように状況を解決できるかを見分けることができます。編集テキストが空のときにGoogleマップのアドレス検索がクラッシュする

public void onSearch(View view) { 

    EditText findLocation = (EditText) findViewById(R.id.editText); 
    String location = findLocation.getText().toString(); 
    List<Address> addressList = null; 


    if (location != null || !location.equals("")) { 


     //Geocode gecoder = new Geocoder(this) 
     //geocoder.getFromLocationName(location, 1); 
     //then add try and catch 


     Geocoder geocoder = new Geocoder(this); 
     try { 


      addressList = geocoder.getFromLocationName(location, 1); 


      //after try and catch 
      // List<Address> addressList = geocoder.getFromLocationName(location, 1); 


     } catch (IOException e) { 









      e.printStackTrace(); 


     } 
    } 

    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 


} 

スタックトレース

java.lang.IllegalStateException: Could not execute method for android:onClick 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4452) 
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447) 
at android.view.View.performClick(View.java:5198)  
at android.view.View$PerformClick.run(View.java:21147)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
Caused by: 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.hadleigh.googlemapstest.MapsActivity.onSearch(MapsActivity.java:91) 
at java.lang.reflect.Method.invoke(Native Method)  
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)  
at android.view.View.performClick(View.java:5198)  
at android.view.View$PerformClick.run(View.java:21147)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
+0

クラッシュからlogcatからスタックトレースを追加してください。 –

+0

私の質問を編集しました – Hadleigh

答えて

0
public boolean onSearch(View view) { 

    EditText findLocation = (EditText) findViewById(R.id.editText); 
    String location = findLocation.getText().toString(); 
    List<Address> addressList = null; 


    if (location.isEmpty()) { 

     Toast.makeText(getApplicationContext(), "Please enter address", Toast.LENGTH_LONG).show(); 

     return true; 


    }else { 

     //Geocode gecoder = new Geocoder(this) 
     //geocoder.getFromLocationName(location, 1); 
     //then add try and catch 


     Geocoder geocoder = new Geocoder(this); 
     try { 


      addressList = geocoder.getFromLocationName(location, 1); 


      //after try and catch 
      // List<Address> addressList = geocoder.getFromLocationName(location, 1); 


     } catch (IOException e) { 









      e.printStackTrace(); 


     } 
    } 

    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 


    return false; 
} 
+0

初期コードの問題は、|| 、あなたがここにいるようにisEmpty()は良いです:) –

+0

ありがとう、それは理解するのは苦痛でしたが、その最後に行われた:D – Hadleigh

1

あなたのEditTextが空だったかどうかをチェックするために右のロジックを持っていましたが、あなたはまだaddressListは結果でいっぱい持つことが期待されています。あなたはtry-catch blocksaddMarkerロジックを配置する必要があり、またはアドレスが空でないかどうかを確認:

if (addressList != null && !addressList.isEmpty()) { 
    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
} 
関連する問題