2016-09-08 2 views
-1

탭 (viewPager)에서 맵을 사용하고 있으며이 목적으로 맵에서 위치를 검색하려고합니다. EditText 필드와 배열 목록을 사용하고 있지만 나는 아직도이 오류가 발생하고있다. 나는 그 문제가 무엇인지 알 수 없었다. 아무도 나에게 제안 해주세요, 어떻게해야합니까?오류 java.lang.IndexOutOfBoundsException : 잘못된 인덱스 0, 크기가 0이면 viewPager의 조각입니다.

FATAL EXCEPTION: main Process: com.example.saroosh.masjidnow, PID: 10465 
    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.saroosh.masjidnow.Tabs.AddMasjid$1.onClick(AddMasjid.java:61) at 
    android.view.View.performClick(View.java:5184) at 
    android.view.View$PerformClick.run(View.java:20910) 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:5942) 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:1389) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 

내 Java 클래스는 아래와 같습니다.

AddMasjid.java

package com.example.saroosh.masjidnow.Tabs; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.location.Geocoder; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.content.Context; 
import android.widget.Button; 
import android.widget.EditText; 

import com.example.saroosh.masjidnow.R; 
import com.google.android.gms.identity.intents.Address; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.MapView; 
import com.google.android.gms.maps.MapsInitializer; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

import java.io.IOException; 
import java.util.List; 

public class AddMasjid extends Fragment implements OnMapReadyCallback { 

    MapView gMapView; 
    GoogleMap gMap = null; 
    Button sButton; 
    String location; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.add_masjid, container, false); 
     EditText sLocation = (EditText) v.findViewById(R.id.editText1); 
     location = sLocation.getText().toString(); 
     sButton = (Button) v.findViewById(R.id.generalId); 
     sButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       List<android.location.Address> addressList= null; 

       if (location != null || !location.equals("")) 
       { 
        Geocoder geocoder = new Geocoder(getActivity().getApplicationContext()); 
        try { 
         addressList = geocoder.getFromLocationName(location, 1); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

        android.location.Address address = addressList.get(0); 
        LatLng latlng = new LatLng(address.getLatitude(),address.getLatitude()); 
        gMap.addMarker(new MarkerOptions().position(latlng).title("Marker")); 
        gMap.animateCamera(CameraUpdateFactory.newLatLng(latlng)); 
       } 

      } 
     }); 

     gMapView = (MapView) v.findViewById(R.id.map); 
     gMapView.getMapAsync(this); 
     gMapView.onCreate(savedInstanceState); 
     gMapView.onResume(); // needed to get the map to display immediately 
     try { 
      MapsInitializer.initialize(getActivity().getApplicationContext()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return v; 
    } 


    @Override 
    public void onMapReady(GoogleMap map) { 
     gMap = map; 
     gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new 
       LatLng(0, 0), 0)); 


     if (gMap != null) { 
      gMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
      if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext() 
        , Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity().getApplicationContext() 
        , Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 
       // ActivityCompat#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       //           int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for ActivityCompat#requestPermissions for more details. 
       return; 
      } 
      gMap.setMyLocationEnabled(true); 
      gMap.getUiSettings().setMyLocationButtonEnabled(true); 


     } 
    } 
    @Override 
    public void onResume() { 
     super.onResume(); 
     gMapView.onResume(); 

    } 

    public void onSearch(View view) throws IOException{ 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     gMapView.onPause(); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     gMapView.onDestroy(); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     gMapView.onLowMemory(); 
    } 


} 
+0

: 내 editText 방법 setOnClickListener에를 선언 할 때 다음 내 목록은 다음과 같이 그것의 위치를 ​​찾을 수? – Rodriquez

+0

addressList에서 위치의 값을 전달할 수있는 방법을 찾을 수 없습니다. –

답변

0
List<android.location.Address> addressList= null; 

그리고 u는

android.location.Address address = addressList.get(0); 

U 어떤 레코드를주지 수도 렸기 때문에 추가 위치

if (location != null || !location.equals("")) 
      { 
       Geocoder geocoder = new Geocoder(getActivity().getApplicationContext()); 
       try { 
        addressList = geocoder.getFromLocationName(location, 1); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

를 확인하기 위해 로그인 시도하고 addressList.get (0) U가 걸릴 자바 위치에서 알다시피 위치는 0,1,2에서 시작하고 위치가 0이면 오류가 발생합니다. BoundOfException

+0

우리가'addressList'를 얻지 못하면 왜 우리가 처리하려고하기 때문에 OP가 try-catch가 try-catch (try-catch) 안에 그것들을 옮긴 후에 4 줄을 움직이는 것이 합리적일까요? – Sufian

+0

@Rodriquez 그래서 어떻게 가치를 전달할 수 있습니까? –

0

주소 목록은 여기 비어 : addressList.get(0).

모든 위치에 유효한 주소가있는 것은 아닙니다. 코드는이 사실을 처리해야합니다.

+0

유효한 주소로 어떻게 값을 전달할 수 있습니까? –

0

나는 내 문제를 해결했다. 내 목록에서 위치를 찾을 수 없으며 오류가있는 방법입니다 필드 onCreat 방법으로 내 위치 문자열을 전달했다. u는이 오류 코드에 대해

sButton =(Button) v.findViewById(R.id.generalId); 
     sButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       hideSoftKeyboard(v); 
       EditText sLocation = (EditText)getActivity().findViewById(R.id.editText1); 
       location = sLocation.getText().toString(); 

       List<android.location.Address> addressList= null; 

       if (location != null || location.length()>0) { 
        Geocoder geocoder = new Geocoder(getActivity().getApplicationContext()); 
        try { 
         addressList = geocoder.getFromLocationName(location, 1); 

        } catch (IOException e) { 

          e.printStackTrace(); 
        } 

        android.location.Address address = addressList.get(0); 
        String locality = address.getLocality(); 
        Toast.makeText(getActivity(), locality, Toast.LENGTH_LONG).show(); 
        double latitude = address.getLatitude(); 
        double longitude = address.getLongitude(); 
        LatLng latLng = new LatLng(latitude, longitude); 
        gMap.addMarker(new MarkerOptions().position(latLng).title("Marker")); 
        gMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 

       } 

      } 
     }); 
관련 문제