2016-09-10 5 views
0

Как достичь этого парня? У меня есть две кнопки для моего приложения.На фокусе или кнопке onclick не обновляемый плейлист от парсера Json URL

  1. Button1 выборки/извлечь все видео из списка воспроизведение Json файла по URL называется VideoAll.js

  2. Button2 выборка/извлекать Великобританию Видео плейлиста из Json файла на URL называемого VideoUK.js

Мой код работает и извлекает список воспроизведения, когда я нажимаю кнопку «Все» (VideoAll.js), но когда я нажимаю кнопку «Великобритания», она не обновляется, и я получаю тот же список из VideoAll.js. Я должен закрыть приложение и открыть для него щелчок Сначала нажмите кнопку UK, чтобы получить правильный плейлист из VideoUK. js, но снова я не могу получить список от All. В основном это не освежает или не обновляет onclick или даже onfocus. его вызов Json каждый раз, когда я нажимаю, я уверен, что это не так, и я делаю это неправильно.

MyActivity

public class VideoPlayerActivity extends Activity implements MediaPlayer.OnPreparedListener { 
private DrawerLayout mDrawerLayout; 
private ActionBarDrawerToggle mDrawerToggle; 
//private Toolbar toolbar; 
private ListView mDrawerList; 
private CharSequence mDrawerTitle; 
private RelativeLayout mDrawerRelativeLayout; 

public static final String EXTRA_INDEX = "EXTRA_INDEX"; 
public static final int PLAYLIST_ID = 6; //Arbitrary, for the example (different from audio) 
protected EMVideoView emVideoView; 
protected PlaylistManager playlistManager; 

protected int selectedIndex = 2;//Auto play first video 
private final String VIDEO_URL1 = "http://satdoc.dyndns.info/all.js"; 
private final String VIDEO_URL2 = "http://satdoc.dyndns.info/uk.js"; 


private String TAG = "VideoPlayerActivity"; 
List<VideoItem> videoList = new ArrayList<>(); 
private FullScreenListener fullScreenListener; 
//private Toolbar toolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.video_player_activity); 
    setVolumeControlStream(3); 

    mDrawerTitle = getTitle(); 


    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.selection_activity_list); 
    mDrawerRelativeLayout = (RelativeLayout) findViewById(R.id.left_drawer); 

    emVideoView = (EMVideoView) findViewById(R.id.video_play_activity_video_view); 
    emVideoView.setOnPreparedListener(this); 


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     fullScreenListener = new FullScreenListener(); 
    } 

    goFullscreen(); 
    emVideoView.setVideoViewControlsCallback(new DefaultControlsCallback()); 

    initDrawer(); 

    Button btn = (Button) findViewById(R.id.button); 
    Button btn2 = (Button) findViewById(R.id.button2); 



    btn.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      if (hasFocus) { 
       fetchVideos1(); 
      } 
     } 

    }); 


    btn2.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      if (hasFocus) { 
       fetchVideos2(); 
      } 
     } 

    }); 

} 


/** 
* Fetch for videos online. 
*/ 
public void fetchVideos1() { 
    if (NetworkConnectionStatus.isOnline(this)) {//If there is internet connection, load reviews through a http request. 
     final ProgressDialog progressDialog = new ProgressDialog(this); 

     AsyncHttpClient client = new AsyncHttpClient(); 
     client.setTimeout(20_000); 
     client.get(VIDEO_URL1, new AsyncHttpResponseHandler() { 

      @Override 
      public void onStart() { 
       // called before request is started 

      } 

      @Override 

      public void onSuccess(int statusCode, Header[] headers, byte[] response) {// called when response HTTP status is "200 OK" 
       String jsonResponse = new String(response); 



       try { 


        JSONArray jsonArray = new JSONArray(jsonResponse); 
        JSONObject jsonObject; 
        String videoTitle, videoUrl; 
        int videoNum; 
        int length = jsonArray.length(); 


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


         jsonObject = (JSONObject) jsonArray.get(i); 
         videoTitle = jsonObject.getString("chname"); 
         videoUrl = jsonObject.getString("chlink"); 
         videoNum = jsonObject.getInt("chid"); 

         VideoItem videoItem = new VideoItem(videoTitle, videoUrl, videoNum); 
         videoList.add(videoItem); 
        } 


        setTitle(mDrawerTitle); 
        init(); 
        mDrawerList.setAdapter(new VideoSelectionListAdapter(VideoPlayerActivity.this, videoList)); 

       } catch (Exception e) { 
        Log.e(TAG, e.getMessage(), e); 
       } 

       progressDialog.dismiss(); 

      } 

      @Override 
      public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { 

       Toast.makeText(VideoPlayerActivity.this, "A server error occured, Try again later", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onRetry(int retryNo) { 
       // called when request is retried 
      } 
     }); 

    } else { 
     Toast.makeText(VideoPlayerActivity.this, "No internet connection", Toast.LENGTH_LONG).show(); 

    } 

} 




public void fetchVideos2() { 
    if (NetworkConnectionStatus.isOnline(this)) {//If there is internet connection, load reviews through a http request. 
     final ProgressDialog progressDialog = new ProgressDialog(this); 



     AsyncHttpClient client = new AsyncHttpClient(); 
     client.setTimeout(20_000); 
     client.get(VIDEO_URL2, new AsyncHttpResponseHandler() { 

      @Override 
      public void onStart() { 
       // called before request is started 

      } 

      @Override 

      public void onSuccess(int statusCode, Header[] headers, byte[] response) {// called when response HTTP status is "200 OK" 
       String jsonResponse = new String(response); 



       try { 


        JSONArray jsonArray = new JSONArray(jsonResponse); 
        JSONObject jsonObject; 
        String videoTitle, videoUrl; 
        int videoNum; 
        int length = jsonArray.length(); 


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


         jsonObject = (JSONObject) jsonArray.get(i); 
         videoTitle = jsonObject.getString("chname"); 
         videoUrl = jsonObject.getString("chlink"); 
         videoNum = jsonObject.getInt("chid"); 

         VideoItem videoItem = new VideoItem(videoTitle, videoUrl, videoNum); 
         videoList.add(videoItem); 
        } 


        setTitle(mDrawerTitle); 
        init(); 
        mDrawerList.setAdapter(new VideoSelectionListAdapter(VideoPlayerActivity.this, videoList)); 

       } catch (Exception e) { 
        Log.e(TAG, e.getMessage(), e); 
       } 

       progressDialog.dismiss(); 

      } 

      @Override 
      public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { 

       Toast.makeText(VideoPlayerActivity.this, "A server error occured, Try again later", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onRetry(int retryNo) { 
       // called when request is retried 
      } 
     }); 

    } else { 
     Toast.makeText(VideoPlayerActivity.this, "No internet connection", Toast.LENGTH_LONG).show(); 

    } 

} 

А вот мой второй Json файл на сервере (VideoUK.js)

[ 
{ 
    "chid": 1, 
    "chname": "UK1", 
    "chlogo": "", 
    "chlink": "http://samplevideoUK1.mp4", 
    "chenable": "", 
    "chnote": "" 
}, 
{ 
    "chid": 2, 
    "chname": "UK 2", 
    "chlogo": "", 
    "chlink": "http://samplevideoUK2.mp4", 
    "chenable": "", 
    "chnote": "" 
}, 
{ 
    "chid": 3, 
    "chname": "UK 3", 
    "chlogo": "", 
    "chlink": "http://samplevideoUK3.mp4", 
    "chenable": "", 
    "chnote": 

} 
] 

и здесь (VideoAll.js)

[ 
{ 
    "chid": 1, 
    "chname": "Video 1", 
    "chlogo": "", 
    "chlink": "http://samplevideo1.mp4", 
    "chenable": "", 
    "chnote": "" 
}, 
{ 
    "chid": 2, 
    "chname": "Video 2", 
    "chlogo": "", 
    "chlink": "http://samplevideo2.mp4", 
    "chenable": "", 
    "chnote": "" 
}, 
{ 
    "chid": 3, 
    "chname": "RO 3", 
    "chlogo": "", 
    "chlink": "http://samplevideo3.mp4", 
    "chenable": "", 
    "chnote": 
} 
] 

и, наконец, мои кнопки в моем макете

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:baselineAligned="false"> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="All" 
      android:id="@+id/button1" 
      android:layout_weight="1" /> 


    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:baselineAligned="false" > 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="@string/uk" 
      android:id="@+id/button2" 
      android:choiceMode="none" 
      android:focusable="true" 
      android:fadeScrollbars="false" 
      android:layout_weight="1" /> 

    </LinearLayout> 

Может кто-нибудь, пожалуйста, хотя бы показать пример вызова json и получить список каждый раз, когда мы нажимаем кнопку обновленной ?. Сначала запускается только кнопка, которая нажата, но после этого ничего не меняется, когда я нажимаю. извините за повторение, но это сводит меня с ума.

Screenshot of my ap

ответ

0

во-первых, ясно список видео на кнопку мыши

 btn.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       // TODO Auto-generated method stub 
       if (hasFocus) { 
videoList.clear(); 
        fetchVideos1(); 
       } 
      } 

     }); 


     btn2.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       // TODO Auto-generated method stub 
       if (hasFocus) { 
videoList.clear(); 
        fetchVideos2(); 
       } 
      } 

     }); 

и уведомить данных, установленные Chenge после установки адаптера в веб-сервисы, как:

mDrawerList.notifyDataSetChanged(); 

Пожалуйста, используйте это после этой строки в код:

setTitle(mDrawerTitle); 
       init(); 
       mDrawerList.setAdapter(new VideoSelectionListAdapter(VideoPlayerActivity.this, videoList)); 

notifyDataSetChanged(); 

используется для обновления адаптера

также четкий перечень на vutton для быстрого ответа Ашиша нажмите

+0

Спасибо! Может спросить вас, где я должен использовать этот код mDrawerList.notifyDataSetChanged(); Пожалуйста, помогите мне. –

+0

My God Ashish !! Ты суперзвезда и спас меня много. Теперь он работает сразу после добавления videoList.clear(); на каждом VideoFetch Я не могу поверить в это, но я изучаю андроид шаг за шагом от таких парней, как ты. Спасибо, дорогой. Я спрашиваю вас, почему мне нужна последняя строка, которую вы упомянули? Я попробую и посмотрю, как это происходит. –

+0

Привет, Ашис, Работая и обновляя список, но забавное поведение, которое я получаю, - это открытие ящика, когда он начинает воспроизводить первое видео от Все на каждый раз, когда я хочу изменить видео.Вы знаете, как быть в последней выбранной категории видео (Великобритания), а также в последнем выбранном видео (UK1), чтобы я мог управлять ящиком? –

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

  • Нет связанных вопросов^_^