2017-07-17 293 views
1

我試圖讓我的反應原生應用中播放視頻。 I'm trying to use react-native-video而是通過react-native run-android運行應用程序時出現錯誤消息:反應原生視頻與反應原生導航工作

「不確定是不是一個對象(evaluating'_reactNative.NativeModules.UIManager.RCT Video.Constants')

此消息並沒有真正告訴我想了很多,但在嘗試讓它工作一段時間後,我開始懷疑react-native-navigation這是我用於我的應用的導航,它與它有關,所以我創建了一個新的react-native項目並添加了反應,本機視頻到它,並得到它的工作沒有太多的麻煩。

所以我的問題是,如果任何人都經歷過同樣的事情,並可以提供解決方案讓這兩個軟件包一起工作?

我settings.gradle:

rootProject.name = 'newproj' 
include ':react-native-video' 
project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android') 

include ':app' 
include ':react-native-navigation' 
project(':react-native-navigation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-navigation/android/app/') 

的build.gradle模塊反應天然視頻

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 23 
    buildToolsVersion '25.0.1' 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
     ndk { 
      abiFilters "armeabi-v7a", "x86" 
     } 
    } 
} 

dependencies { 
    provided 'com.facebook.react:react-native:+' 
    compile 'com.yqritc:android-scalablevideoview:1.0.1' 
} 

依賴於build.grade模塊:應用

dependencies { 
    compile fileTree(dir: "libs", include: ["*.jar"]) 
    compile "com.android.support:appcompat-v7:23.0.1" 
    compile "com.facebook.react:react-native:+" // From node_modules 
    compile project(':react-native-navigation') 
    compile project(':react-native-video') 
} 

MainApplication.java

import android.app.Application; 

import com.facebook.react.ReactApplication; 
import com.brentvatne.react.ReactVideoPackage; 
import com.facebook.react.ReactNativeHost; 
import com.facebook.react.ReactPackage; 
import com.facebook.react.shell.MainReactPackage; 
import com.facebook.soloader.SoLoader; 
import com.reactnativenavigation.NavigationApplication; 

import java.util.Arrays; 
import java.util.List; 

public class MainApplication extends NavigationApplication { 

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
    @Override 
    public boolean getUseDeveloperSupport() { 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    protected List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
      new MainReactPackage(), 
      new ReactVideoPackage() 
    ); 
    } 
    }; 

    @Override 
    public ReactNativeHost getReactNativeHost() { 
    return mReactNativeHost; 
    } 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    SoLoader.init(this, /* native exopackage */ false); 
    } 

    @Override 
    public boolean isDebug() { 
     // Make sure you are using BuildConfig from your own application 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    public List<ReactPackage> createAdditionalReactPackages() { 
     return null; 
    } 

} 

在我反應過來本地項目:

import Video from 'react-native-video'; 

    <View style={styles.container}> 
     <Video source={{uri: "youtube.com"}} 
      ref={(ref) => { 
      this.player = ref 
      }} 
resizeMode="cover" 
style={styles.backgroundVideo} 
/> 
</View> 
+0

能否請您與您的代碼更新您的文章? –

+0

不知道它如何幫助解決這個問題,但我已經更新了代碼! – smuvv

+1

'react-navigation'和'react-native-video'之間沒有聯繫,'undefined不是一個對象'通常在你忘記聲明參數時發生。因此,如果您發佈該特定屏幕的完整代碼(js代碼不是java代碼) –

回答

1

createAdditionalReactPackages應該返回的包。

更改此

@Override 
public List<ReactPackage> createAdditionalReactPackages() { 
    return null; 
} 

這樣:

@Override 
public List<ReactPackage> createAdditionalReactPackages() { 
    return getPackages(); 
} 
+0

這將會很有幫助,這導致了正確的答案,謝謝! – smuvv