Как достичь этого парня? У меня есть две кнопки для моего приложения.На фокусе или кнопке onclick не обновляемый плейлист от парсера Json URL
Button1 выборки/извлечь все видео из списка воспроизведение Json файла по URL называется VideoAll.js
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 и получить список каждый раз, когда мы нажимаем кнопку обновленной ?. Сначала запускается только кнопка, которая нажата, но после этого ничего не меняется, когда я нажимаю. извините за повторение, но это сводит меня с ума.
Спасибо! Может спросить вас, где я должен использовать этот код mDrawerList.notifyDataSetChanged(); Пожалуйста, помогите мне. –
My God Ashish !! Ты суперзвезда и спас меня много. Теперь он работает сразу после добавления videoList.clear(); на каждом VideoFetch Я не могу поверить в это, но я изучаю андроид шаг за шагом от таких парней, как ты. Спасибо, дорогой. Я спрашиваю вас, почему мне нужна последняя строка, которую вы упомянули? Я попробую и посмотрю, как это происходит. –
Привет, Ашис, Работая и обновляя список, но забавное поведение, которое я получаю, - это открытие ящика, когда он начинает воспроизводить первое видео от Все на каждый раз, когда я хочу изменить видео.Вы знаете, как быть в последней выбранной категории видео (Великобритания), а также в последнем выбранном видео (UK1), чтобы я мог управлять ящиком? –