1

подробноОчень странное исключение, IndexOutOfBoundsException в 4.4, но работает хорошо в 5.0: Android

я есть класса А и в этом классе у меня есть

public static ArrayList<String> video_title = new ArrayList<String>(); 

и все значения video_title заполнены в классе А

чем я собираюсь класс B из класса A и доступ к ArrayList как A.video_title.get (index) .. ok, который отлично работает как освобожденный.

Теперь возникает реальная проблема, Я открываю веб-представление Android по умолчанию из ссылки класса B и когда я возвращаюсь к моей деятельности (очевидно, когда я нажимаю назад от просмотра веб-страниц открывает мой последний активность класса B), это дает IndexOutOfBoundsException и говорит, что Invalid index 2, size is 0.

Более странным является то, что дает ошибку в Android 4.4.4, но работает отлично в

Android 5.0.2 

мой код для обоих классов, как показано ниже (я обмен только необходимый код, потому что мое приложение есть чувствительный код),

Класс A:

public class A extends Activity{ 

public static ArrayList<String> video_title = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.list_of_video); 


    new AsyncTask<Void, Void, Void>() 
    { 


     protected void onPreExecute() 
     { 
      video_title.clear(); 

     }; 

     @Override 
     protected Void doInBackground(Void... params) 
     { 
      // TODO Auto-generated method stub 

      try 
      { 
       JSONObject obj = Handle_json.HTTPGet(“here is my url from data is come“); 

       nextPageToken = obj.getString("nextPageToken"); 

       JSONArray items = obj.getJSONArray("items"); 

       for (int i = 0; i < items.length(); i++) 
       { 

        JSONObject jobj = items.getJSONObject(i); 

        video_title.add("" + omg.getString("title")); 

       } 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     protected void onPostExecute(Void result) 
     { 
      pDialog.dismiss(); 

     }; 

    }.execute(); 

} 



@Override 
public void onBackPressed() 
{ 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    overridePendingTransition(R.drawable.in2, R.drawable.out2); 
    } 
} 

Класс B:

public class B extends YouTubeFailureRecoveryActivity implements OnFullscreenListener{ 

TextView video_detail_title, video_detail_title2, video_detail_views, 
    like_count, dislike_count, video_detail_desc; 
ImageView video_detail_iv; 

ProgressBar video_detail_pb; 

int position = 0; 

RelativeLayout main_content; 

private View videoBox; 
private View closeButton; 
YouTubePlayerView youTubeView; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.video_detail); 

    final Bundle bundle = getIntent().getExtras(); 
    position = bundle.getInt("position"); 

    main_content = (RelativeLayout) findViewById(R.id.main_content); 

    videoBox = findViewById(R.id.video_box); 
    closeButton = findViewById(R.id.close_button); 
    videoBox.setVisibility(View.INVISIBLE); 

    closeButton.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      onClickClose(); 
     } 
    }); 

    findViewById(R.id.video_detail_iv).setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      if (videoBox.getVisibility() != View.VISIBLE) 
      { 
       if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
       { 
        // Initially translate off the screen so that it can be animated in from below. 
        videoBox.setTranslationY(videoBox.getHeight()); 
       } 
       videoBox.setVisibility(View.VISIBLE); 
      } 

      // If the fragment is off the screen, we animate it in. 
      if (videoBox.getTranslationY() > 0) 
      { 
       videoBox.animate().translationY(0).setDuration(300); 
      } 

     } 
    }); 


    youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
    youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this); 

    video_detail_title = (TextView) findViewById(R.id.video_detail_title); 
    video_detail_title.setText("" + A.video_title.get(position)); 


} 

@Override 
public void onBackPressed() 
{ 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    overridePendingTransition(R.drawable.in2, R.drawable.out2); 
} 

@Override 
public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) 
{ 
    // TODO Auto-generated method stub 
    if (!arg2) 
    { 
     arg1.cueVideo(Show_List_Of_Video.video_id.get(position)); 
    } 
} 

@Override 
protected Provider getYouTubePlayerProvider() 
{ 
    // TODO Auto-generated method stub 
    return (YouTubePlayerView) findViewById(R.id.youtube_view); 
} 

private boolean isFullscreen; 

@Override 
public void onFullscreen(boolean arg0) 
{ 
    // TODO Auto-generated method stub 
    this.isFullscreen = arg0; 

    closeButton.setVisibility(isFullscreen ? View.GONE : View.VISIBLE); 
    if (isFullscreen) 
    { 
     videoBox.setTranslationY(0); 

    } 

} 

public void onClickClose() 
{ 
    ViewPropertyAnimator animator = videoBox.animate().translationYBy(videoBox.getHeight()).setDuration(300); 
    runOnAnimationEnd(animator, new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      videoBox.setVisibility(View.INVISIBLE); 
     } 
    }); 
} 

@TargetApi(16) 
private void runOnAnimationEnd(ViewPropertyAnimator animator, final Runnable runnable) 
{ 
    if (Build.VERSION.SDK_INT >= 16) 
    { 
     animator.withEndAction(runnable); 
    } 
    else 
    { 
     animator.setListener(new AnimatorListenerAdapter() 
     { 
      @Override 
      public void onAnimationEnd(Animator animation) 
      { 
       runnable.run(); 
      } 
     }); 
    } 
    } 

} 

Добавлено После:

я нашел что вся переменная всей активности очищается, когда я возвращаюсь к активности B. почему это h appening? даже я объявляю переменную как статическую. что происходит не так?

+0

Можете ли вы поделиться кодом? –

+0

попытайтесь скомпилировать с последними версиями JDK 1.7 или 1.8 –

+0

, если это проблема JDK, чем она должна также дать ошибку в 5.0.2 –

ответ

0

Когда вы Pause ваша деятельность android kitkat 4.4.4 освободите память, удалив ваш arraylist. Вы можете объявить статический архарист, чтобы избежать этой проблемы. или на onPause сохранить arraylist в настройках и загрузить обратно на onResume.

+0

, пожалуйста, посмотрите класс, список массивов, объявленный как статический ... –

+0

Вы пытались создать список внутри 'onCreate'? 'video_title = new ArrayList ();' –

+0

Я пробовал только минуту назад после вашего комментария, но он не работает! –