Кнопка фокуса или щелчка, не обновляющая список воспроизведения с URL-адреса анализатора Json
Как этого добиться ребята? У меня есть две кнопки моего приложения.
Кнопка1 извлекает / извлекает все списки воспроизведения видео из файла Json по URL-адресу VideoAll.js
Button2 получить / получить плейлист UK Videos из файла Json по URL-адресу VideoUK.js
Мой код работает и получает список воспроизведения, когда я нажимаю кнопку Все (VideoAll.js), но когда я нажимаю кнопку Великобритания, он не обновляется, и я получаю тот же список из VideoAll.js, что мне нужно закрыть приложение и открыть, чтобы нажать кнопку Великобритания. Сначала нажмите кнопку, чтобы получить правильный список воспроизведения из 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 и получать список каждый раз, когда мы нажимаем кнопку обновляется?. Сначала работает только та кнопка, которая нажата, но после этого ничего не меняется при нажатии. извините за повторение, но это сводит меня с ума.
1 ответ
Сначала очистить список видео по нажатию кнопки
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();
}
}
});
и уведомить об изменении набора данных после настройки адаптера в веб-сервисах, например:
mDrawerList.notifyDataSetChanged();
Пожалуйста, используйте это после этой строки в вашем коде:
setTitle(mDrawerTitle);
init();
mDrawerList.setAdapter(new VideoSelectionListAdapter(VideoPlayerActivity.this, videoList));
notifyDataSetChanged();
используется для обновления адаптера
также очистить список по нажатию кнопки