Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用匕首2注入外星玩家_Java_Android_Dagger 2 - Fatal编程技术网

Java 如何使用匕首2注入外星玩家

Java 如何使用匕首2注入外星玩家,java,android,dagger-2,Java,Android,Dagger 2,我有一个android应用程序,我想用dagger2实现exoplayer。 目前,我为exoPlayer提供了以下示例: 为了 我打算用黄油刀 为了 如何使用Dagger将这些变量注入到我的活动中? 提前谢谢 问候对于那些只喜欢抱怨和否决投票的人,下面是如何使用exoPlayer with dagger2,欢迎您: 模块: import android.content.Context; import android.net.Uri; import android.os.Handler; i

我有一个android应用程序,我想用dagger2实现exoplayer。 目前,我为exoPlayer提供了以下示例:

为了

我打算用黄油刀

为了

如何使用Dagger将这些变量注入到我的活动中? 提前谢谢


问候

对于那些只喜欢抱怨和否决投票的人,下面是如何使用exoPlayer with dagger2,欢迎您:

模块:

import android.content.Context;
import android.net.Uri;
import android.os.Handler;

import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveVideoTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.Util;

import dagger.Module;
import dagger.Provides;

@Module
public class ExoPlayerModule {
    private final Context context;
    private String videoUri;

    public ExoPlayerModule (Context context, String videoUri) {
        this.context  = context;
        this.videoUri = videoUri;
    }

    @Provides //scope is not necessary for parameters stored within the module
    public Context context() {
        return context;
    }

    @Provides
    public Handler provideMoviesClient() {
        Handler handler = new Handler();
        return handler;
    }

    @Provides
    public DefaultBandwidthMeter providesDefaultBandwidthMeter() {
        DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        return bandwidthMeter;
    }

    // Create player

    @Provides
    public TrackSelection.Factory providesVideoTrackSelection(DefaultBandwidthMeter bandwidthMeter) {
        TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
        return videoTrackSelectionFactory;
    }

    @Provides
    public TrackSelector providesTrackSelector(TrackSelection.Factory videoTrackSelectionFactory) {
        TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
        return trackSelector;
    }

    @Provides
    public LoadControl providesLoadControl() {
        LoadControl loadControl = new DefaultLoadControl();
        return loadControl;
    }

    @Provides
    public SimpleExoPlayer providesExoPlayer(
            Context context, TrackSelector trackSelector, LoadControl loadControl) {
        SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
        return player;
    }

    // Prepare player
    @Provides
    public String providesUserAgent(Context context) {
        return Util.getUserAgent(context, "AppName");
    }

    @Provides
    public HttpDataSource.Factory providesHttpDataSource(
            String userAgent, DefaultBandwidthMeter bandwidthMeter) {
        return new DefaultHttpDataSourceFactory(userAgent, bandwidthMeter);
    }

    @Provides
    public DataSource.Factory providesDataSource(
            Context context, DefaultBandwidthMeter bandwidthMeter, HttpDataSource.Factory httpDataSource) {
        return new DefaultDataSourceFactory(context, bandwidthMeter, httpDataSource);
    }

    @Provides
    public MediaSource providesMediaSource(DataSource.Factory dataSourceFactory, Handler mainHandler) {
        Uri uri = Uri.parse(videoUri);
        return new ExtractorMediaSource(uri, dataSourceFactory, new DefaultExtractorsFactory(), mainHandler, null);
    }

}
以下是组件:

@Module
public class ApplicationModule {
    private MvvmApplication application;

    public ApplicationModule(MvvmApplication application) {
        this.application = application;
    }
}
最后是活动:

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;

import com.example.movies.R;
import com.example.movies.dependencyinjection.DaggerPlayerActivityComponent;
import com.example.movies.dependencyinjection.PlayerActivityComponent;
import com.example.movies.dependencyinjection.module.ExoPlayerModule;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.HttpDataSource;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;

import javax.inject.Inject;

@EActivity(R.layout.activity_player)
public class PlayerActivity extends AppCompatActivity {

    private PlayerActivityComponent component;

    @Inject
    Handler handler;

    @Inject
    DefaultBandwidthMeter bandwidthMeter;

    @ViewById(R.id.mainSimpleExoPlayer)
    SimpleExoPlayerView simpleExoPlayerView;

    // Create player
    @Inject
    TrackSelection.Factory videoTrackSelectionFactory;
    @Inject
    TrackSelector trackSelector;
    @Inject
    LoadControl loadControl;
    @Inject
    SimpleExoPlayer player;

    // Prepare player
    @Inject
    String userAgent;
    @Inject
    HttpDataSource.Factory httpDataSourceFactory;
    @Inject
    DataSource.Factory dataSourceFactory;
    @Inject
    MediaSource videoSource;

    // Not injectable
    public Uri uri;

    private static final String VIDEO_URI =
            "http://techslides.com/demos/sample-videos/small.mp4";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        component =
                DaggerPlayerActivityComponent
                        .builder()
                        .exoPlayerModule(new ExoPlayerModule(PlayerActivity.this, VIDEO_URI))
                        .build();

        component.inject(this);
    }

    @AfterViews
    void init() {
        attachPlayerView();
        preparePlayer();
    }

    // Set player to SimpleExoPlayerView
    public void attachPlayerView() {
        simpleExoPlayerView.setPlayer(player);
    }

    public void preparePlayer() {
        player.prepare(videoSource);
    }

    // Activity onStop, player must be release because of memory saving
    @Override
    public void onStop(){
        super.onStop();
        player.release();
    }
}
有很多不同的方法来设置Dagger,如何使用组件,等等。我们不能为您这样做,一个简单的示例来强调如何可能对您毫无用处。您应该尝试阅读官方指南和一些教程,只有在遇到无法修复的特定问题或错误时才在此处提问。
@Module
public class ApplicationModule {
    private MvvmApplication application;

    public ApplicationModule(MvvmApplication application) {
        this.application = application;
    }
}
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;

import com.example.movies.R;
import com.example.movies.dependencyinjection.DaggerPlayerActivityComponent;
import com.example.movies.dependencyinjection.PlayerActivityComponent;
import com.example.movies.dependencyinjection.module.ExoPlayerModule;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.HttpDataSource;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;

import javax.inject.Inject;

@EActivity(R.layout.activity_player)
public class PlayerActivity extends AppCompatActivity {

    private PlayerActivityComponent component;

    @Inject
    Handler handler;

    @Inject
    DefaultBandwidthMeter bandwidthMeter;

    @ViewById(R.id.mainSimpleExoPlayer)
    SimpleExoPlayerView simpleExoPlayerView;

    // Create player
    @Inject
    TrackSelection.Factory videoTrackSelectionFactory;
    @Inject
    TrackSelector trackSelector;
    @Inject
    LoadControl loadControl;
    @Inject
    SimpleExoPlayer player;

    // Prepare player
    @Inject
    String userAgent;
    @Inject
    HttpDataSource.Factory httpDataSourceFactory;
    @Inject
    DataSource.Factory dataSourceFactory;
    @Inject
    MediaSource videoSource;

    // Not injectable
    public Uri uri;

    private static final String VIDEO_URI =
            "http://techslides.com/demos/sample-videos/small.mp4";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        component =
                DaggerPlayerActivityComponent
                        .builder()
                        .exoPlayerModule(new ExoPlayerModule(PlayerActivity.this, VIDEO_URI))
                        .build();

        component.inject(this);
    }

    @AfterViews
    void init() {
        attachPlayerView();
        preparePlayer();
    }

    // Set player to SimpleExoPlayerView
    public void attachPlayerView() {
        simpleExoPlayerView.setPlayer(player);
    }

    public void preparePlayer() {
        player.prepare(videoSource);
    }

    // Activity onStop, player must be release because of memory saving
    @Override
    public void onStop(){
        super.onStop();
        player.release();
    }
}