苦苦挣扎搜索谷歌地图的地方

时间:2016-09-29 10:19:54

标签: android dictionary search nullpointerexception

MapActivity

public class Agriculture extends AppCompatActivity implements    
       OnMapReadyCallback, 
       GoogleMap.OnInfoWindowClickListener, 
       GoogleMap.OnMarkerClickListener {

    GoogleMap mMap;
    Address address;
    LatLng latLng;
    SupportMapFragment sMapFragment;
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }


public void onSearch(View view)


 {

        EditText tfLocation = (EditText) findViewById(R.id.tfLocation);

        String location = tfLocation.getText().toString();

        List<Address> addressList = null;

        if (location!=null && !location.equals(""))
        {
            Geocoder geocoder = new Geocoder(this);
            try {

                addressList = geocoder.getFromLocationName(location, 0);
            } catch (IOException e) {
                e.printStackTrace();
            }

            Address address = addressList.get(0);
            LatLng latLng = new LatLng(address.getLatitude() , address.getLongitude());

logcat的

Process: amahlo.gridview, PID: 13000
java.lang.IllegalStateException: Could not execute method for android:onClick
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
 at android.view.View.performClick(View.java:5210)
 at android.view.View$PerformClick.run(View.java:20976)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:145)
 at android.app.ActivityThread.main(ActivityThread.java:6145)
 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:1399)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.reflect.InvocationTargetException
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
 at android.view.View.performClick(View.java:5210) 
 at android.view.View$PerformClick.run(View.java:20976) 
 at android.os.Handler.handleCallback(Handler.java:739) 
 at android.os.Handler.dispatchMessage(Handler.java:95) 
 at android.os.Looper.loop(Looper.java:145) 
 at android.app.ActivityThread.main(ActivityThread.java:6145) 
 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:1399) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
 at amahlo.gridview.Agriculture.onSearch(Agriculture.java:45)
 at java.lang.reflect.Method.invoke(Native Method) 
 at java.lang.reflect.Method.invoke(Method.java:372) 
 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
 at android.view.View.performClick(View.java:5210) 
 at android.view.View$PerformClick.run(View.java:20976) 
 at android.os.Handler.handleCallback(Handler.java:739) 
 at android.os.Handler.dispatchMessage(Handler.java:95) 
 at android.os.Looper.loop(Looper.java:145) 
 at android.app.ActivityThread.main(ActivityThread.java:6145) 
 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:1399) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

1 个答案:

答案 0 :(得分:0)

忽略location不能null ...

的事实

首先将列表设置为null。

List<Address> addressList = null;

然后继续检查字符串是否为空并进行一些尝试。

if (!TextUtils.isEmpty(location))
{
    Geocoder geocoder = new Geocoder(this);
    try {
        addressList = geocoder.getFromLocationName(location, 0);
    } catch (IOException e) {
        e.printStackTrace();
    }

但是,在这里,如果有异常,addressList仍为空,那么您的错误。

    Address address = addressList.get(0);

没有看到实际的异常,很难给出完整的答案,但是防止NullPointer的快速解决方案是将最后一行移到try(并且在尝试之前检查!addressList.isEmpty()可选访问其数据)。