2015-11-16 3 views
0

Почему и где мой массив выкидывается за пределы?Ошибка выброса, когда массив java находится за пределами границ

public class DownloadRawData extends AsyncTask<String, Void, String> 

{ 

    @Override 
    public void onPostExecute(String webData) { 

     mData =webData; 
     Log.v(LOG_TAG, "Data returned was: "+mData); 
     if(mData ==null) { 
      if (mRawURL ==null) { 
       mDownloadStatus = DownloadStatus.NOT_INITIALIZED; 
      } else { 
       mDownloadStatus =DownloadStatus.FAILED_OR_EMPTY; 
      } 

     } else { 
      mDownloadStatus =DownloadStatus.OK; 
     } 


    } 
    protected String doInBackground(String...params){ 
     HttpURLConnection urlConnection =null; 
     BufferedReader reader = null; 
     if(params ==null) 
      return null; 
     try{ 
      URL url = new URL(params[0]); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.connect(); 

      InputStream inputStream = urlConnection.getInputStream(); 
      if (inputStream ==null){ 
       return null; 
      } 
      StringBuilder buffer= new StringBuilder(); 

      reader = new BufferedReader(new InputStreamReader(inputStream)); 
      String line; 
      while((line =reader.readLine()) !=null) { 
       buffer.append(line + "\n"); 
      } 
return buffer.toString(); 


     } catch (IOException e) { 
      Log.e(LOG_TAG,"Error",e); 
      return null; 
     } finally { 
      if(urlConnection !=null) { 
       urlConnection.disconnect(); 
      } 
      if(reader !=null) { 
       try { 
        reader.close(); 

       } 
       catch (final IOException e) { 
        Log.e(LOG_TAG,"ERROR closing stream",e); 
       } 
      } 
     } 

Heres мои ошибки

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
      at com.google.android.gms.samples.vision.face.multitracker.GetRawData$DownloadRawData.doInBackground(GetRawData.java:84) 
      at com.google.android.gms.samples.vision.face.multitracker.GetRawData$DownloadRawData.doInBackground(GetRawData.java:55) 

Java линия 55 является

public class DownloadRawData extends AsyncTask<String, Void, String> 

И Java линия 84 является

URL url = new URL(params[0]); 

ответ

4

Этот код:

if(params ==null) 
     return null; 

Не препятствует вызову вызывающего метода без каких-либо аргументов, и в этом случае ваш params будет пустым массивом, поэтому он имеет нулевой размер, поэтому вы получаете исключение.

Вы должны добавить что-то вроде params.length > 0 к этой проверке или изменить логику своего метода каким-либо другим способом, чтобы справиться с этой ситуацией.

Смежные вопросы