Я использую приведенный ниже код для получения URL-адреса локального видео из API.
public void getVideoAds(String serverURL){
String url = "http://"+serverURL+"/video/";
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObj = new JSONObject(response);
JSONObject defaultObj = jsonObj.getJSONObject("default");
JSONArray videoObj = jsonObj.getJSONArray("videos");
defaultUrl = defaultObj.getString("url");
for (int i = 0; i < videoObj.length(); i++){
JSONObject video = videoObj.getJSONObject(i);
VideoAd v = new VideoAd();
v.setName(getVideoNameFromLink(video.getString("url")));
v.setUrl(video.getString("url"));
v.setVideoId(video.getInt("id"));
v.setVersion(video.getInt("version"));
v.setLocalPath("");
vidArrLst.add(v);
}
playLoopVideo();
} catch (Exception e) {
Log.d(TAG, "getVidAds res err: " + e.getMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(ctx, "VideoAds Err: "+error.getLocalizedMessage(), Toast.LENGTH_LONG).show();
Log.d(TAG, "getVidAds err: " + error.getMessage());
}
});
queue.add(stringRequest);
}
А внутри onCreate()
я инициализирую RequestQueue
следующим образом.
queue = Volley.newRequestQueue(this);
Иногда getVideoAds()
работает.Иногда это не работает.Также странно то, что я не получаю никаких ошибок даже после использования Exception
на моем catch()
.Если это не работает, я делаю Clean Project -> Rebuild Project -> Make Project
, и это работает снова.Но после нескольких сборок, в основном всего лишь одной сборки, он снова перестает работать.
Если вы хотите узнать больше о playLoopVideo, посмотрите на этот ТАК * вопрос , который я задал.Речь идет о видео-части моего приложения.В настоящее время он не воспроизводит видео, если я пытаюсь воспроизвести его в onResponse
getVideoAds, поэтому я сделал для него другой вопрос, потому что, возможно, если я исправлю свой Volley
, видео будет воспроизводиться снова.
Это мой build.gradle (приложение), если вам это нужно.
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "biz.net.com.streamer"
minSdkVersion 17
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.android.exoplayer:exoplayer:2.9.1'
implementation 'com.android.volley:volley:1.1.1'
}
ОБНОВЛЕНИЕ:
Это действительно странно.Мой метод getVideoAds()
вызывается внутри другого метода, который вызывает метод, который создает StringRequest
в другом API на том же сервере.Чтобы облегчить понимание ниже, приведен код для него.
private void getAdvertisements(final String serverURL){
getVideoAds(serverURL);
getMessageAds(serverURL);
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.d(TAG, "Updating ads marquee");
getMessageAds(serverURL);
}
},
300000);
}
В настоящее время API, который вызывает getMessageAds()
, ничего не возвращает.Я попытался прокомментировать это и обработчик ниже, и это наконец сработало.Даже воспроизведение видео сработало.Затем я попытался раскомментировать getMessageAds()
и добавить несколько сообщений на сервер, все работает нормально.Но после удаления сообщений оно перестает работать.
В чем может быть причина этого?