2017-09-19 3 views
0

동적 시간 간격으로 사진 및 비디오 수를 표시하고 싶습니다. 내 조건은 비디오 이력서 스레드 또는 우리가 사용하고 무엇을 연주 한 후 동적 간격 2에서Android : 동적 시간 간격으로 사진 및 비디오 표시

1) 디스플레이 사진) 비디오가있는 경우, 3 비디오를 재생하고 작업을 중지)입니다.

스레드를 사용해 보았지만 비디오가 문제를 일으키고 스레드가 예기치 않게 동작합니다. 다음 더 나은 솔루션이나 제안,

이 MainActivity.class

timer = new Thread() { 

     public void run() { 
      try { 
       for (int z = 0; z < userStories.size(); z++) { 

        Log.e("File Name--->", userStories.get(z).getFileName()); 
        Log.e("File TYPEEEE--->", userStories.get(z).getType()); 
        if (userStories.get(z).getType().equalsIgnoreCase("photo")) { 
         Log.e("SLEEEEEPppp-->", "SO GAYA THREAD"); 
         sleep(Long.parseLong(userStories.get(z).getDisplayTime()) * 1000); 
         final int finalZ = z; 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           image.setVisibility(View.VISIBLE); 
           video_view.setVisibility(View.GONE); 
           Glide.with(getApplicationContext()) 
             .load(userStories.get(finalZ).getFileName()) 
             .into(image); 
          } 
         }); 
        } else if (userStories.get(z).getType().equalsIgnoreCase("video")) { 
         /*synchronized (this) { 
          Log.e("Waitttttt-->", "Wait kar riya he..."); 
           wait(); 
          }*/ 
         final int finalZ2 = z; 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           image.setVisibility(View.GONE); 
           video_view.setVisibility(View.VISIBLE); 
           String VideoURL = userStories.get(finalZ2).getFileName(); 
           uri = Uri.parse(VideoURL); 
           if (!TextUtils.isEmpty(VideoURL)) { 

            video_view.setVideoURI(uri); 
            video_view.requestFocus(); 
            video_view.start(); 

            video_view.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
             @Override 
             public void onPrepared(MediaPlayer mediaPlayer) { 
              pauseWork = false; 

             } 
            }); 

            video_view.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
             @Override 
             public void onCompletion(MediaPlayer mediaPlayer) { 
              Log.e("VIDEooooooo--->", "Completeeeee"); 
              Log.e("Thread Notifyyyy--->", "Hooo Gayaaaaaa"); 
              timer.interrupt(); 
             } 
            }); 
           } 
          } 
         }); 
         /*synchronized (timer) { 
          Log.e("WAITTTTTT-->", "WAIT KAR RIYA HE"); 
          timer.wait(); 
         }*/ 
        } 

        final int finalZ1 = z; 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          for (int i = 0; i < userStories.size(); i++) { 
           if (i == finalZ1) { 
            dots[i].setImageDrawable(getResources().getDrawable(R.drawable.selecteditem_dot)); 
           } else { 
            dots[i].setImageDrawable(getResources().getDrawable(R.drawable.nonselecteditem_dot)); 
           } 
          } 
         } 
        }); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } finally { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
        } 
       }); 
      } 
     } 
    }; 
    timer.start(); 

도움을 주셔서 감사합니다 내 코드를 미리

대신 핸들러를 사용할 수 있습니다
+0

JobScheduler를 사용할 수 있다고 생각합니다. @ Shruti –

+0

지금까지 시도한 내용을 게시하십시오. – Akshay

+0

@Akshay, 내 코드 – Shruti

답변

1

에 거기, 아래 코드를 사용해보십시오. 먼저 CallNext() 메서드를 호출해야합니다.

private void bindHandler() { 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      callNext(); 
      Log.e("In HANDLER------>", "HANDLER"); 
     } 
    }, DISPLAY_LENGTH * 1000); 
} 



    private void callNext() { 
    if (counter < statusModel.getStories().get(position).getUserStories().size()) { 
     if (statusModel.getStories().get(position).getUserStories().get(counter).getType().equalsIgnoreCase("photo")) { 
      Log.e("PHOTOOOO--->", "PHOTOOOOO"); 

      String photo = statusModel.getStories().get(position).getUserStories().get(counter).getFileName(); 
      image.setVisibility(View.VISIBLE); 
      video_view.setVisibility(View.GONE); 
      Glide.with(getApplicationContext()) 
        .load(photo) 
        .into(image); 
      counter++; 
      DISPLAY_LENGTH = Long.parseLong(statusModel.getStories().get(position).getUserStories().get(counter).getDisplayTime()); 
      Log.e("DIAPLAY TIME--->", String.valueOf(DISPLAY_LENGTH)); 
      bindHandler(); 
     } else { 
      if (statusModel.getStories().get(position).getUserStories().get(counter).getType().equalsIgnoreCase("video")) { 
       Log.e("VIDEOOOO--->", "VIDEOOOOO"); 
       image.setVisibility(View.GONE); 
       video_view.setVisibility(View.VISIBLE); 
       String VideoURL = statusModel.getStories().get(position).getUserStories().get(counter).getFileName(); 
       uri = Uri.parse(VideoURL); 
       if (!TextUtils.isEmpty(VideoURL)) { 
        video_view.setVideoURI(uri); 
        video_view.requestFocus(); 
        video_view.start(); 
        video_view.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
         @Override 
         public void onPrepared(MediaPlayer mediaPlayer) { 

         } 
        }); 

        video_view.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
         @Override 
         public void onCompletion(MediaPlayer mediaPlayer) { 
          Log.e("VIDEooooooo--->", "Completeeeee"); 

    Log.e("Thread Notifyyyy--->", "Hooo Gayaaaaaa"); 
          counter++; 
          callNext(); 
         } 
        }); 
       } 
      } 
     } 
    } 

} 
+0

을 게시 해 드리겠습니다. 답장을 보내 주시면 감사하겠습니다. – Shruti

+0

@Mustakim, 작동합니다. – Shruti

관련 문제