2016-09-08 16 views
-1

私はタブ(viewPager)でマップを使用していますが、この目的のためにマップ内の位置を検索したいのですが、私はEditTextフィールドと配列リストを使用しています私はまだこのエラーが発生しています。私はそれに問題があるのを見つけることができませんでした。誰も私に何を示唆してください、どうすればいいですか?エラーjava.lang.IndexOutOfBoundsException:無効なインデックス0、サイズはviewPagerでフラグメント内で0です

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) 

マイククラスを以下に示します。

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

:私はsetOnClickListener方法で私のeditTextを宣言すると、その後の私のリストは、このようにそれに場所を見つけますか? – Rodriquez

+0

addressListで、私はどのように私は場所の価値を渡すことができませんでした。 –

答えて

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

、その後uが

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

Uに任意のレコードを与えないことがあり、このbecouse追加する場所

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は取りますあなたがJavaの位置で知っている位置0は0,1,2から始まり、位置0を持たない場合はエラーが発生しますBoundOfException

+0

私たちが 'addressList'を取得しなければ、なぜそれを処理しようとしているので、try-catchの後にOPが4行を移動させるのが理にかなっています(try-catch)。 – Sufian

+0

@Rodriquezだから、どうすれば値を渡すことができますか? –

0

アドレス一覧はこちら空です:addressList.get(0)

すべての場所に有効なアドレスがあるわけではありません。あなたのコードはこの事実を処理しなければなりません。

+0

有効なアドレスで値を渡すにはどうすればよいですか? –

0

私は私の問題を解決しました。私はフィールドでonCreatの方法で私の場所の文字列を渡していた、それは私のaddressListがリスト内の場所を見つけることができなかったと私はエラーがあった方法です。 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)); 

       } 

      } 
     }); 
関連する問題