本人看过很多的博客资料什么的,获取传入Activity的实例,接收时context.getApplicationContext();但是为什么本人的就会强转失败呢
public static APPApplication getsInstance(Context context) { return (APPApplication)context.getApplicationContext(); }
下面这个是本人的AppApplication.class
public class APPApplication extends Application { private AppComponent appComponent; public static APPApplication getsInstance(Context context) { return (APPApplication)context.getApplicationContext(); } @Override public void onCreate() { super.onCreate(); setupComponent(); } private void setupComponent() { appComponent=DaggerAppComponent.builder() .appModule(new AppModule(this)) .gitHubApiModule(new GitHubApiModule()) .build(); } public AppComponent getAppComponent() { return appComponent; } }
就是这里传入当前BaseActivity,到AppApplication,从而AppComponent实例
public abstract class BaseActvity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId()); setupAppComponent(APPApplication.getsInstance(this).getAppComponent()); } protected abstract void setupAppComponent(AppComponent appComponent); protected abstract int getLayoutId(); }
MainActivity.class
public class MainActivity extends BaseActvity { @Inject GitHubApiService gitHubApiService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Call<List<Contributor>> listCall = gitHubApiService.contributorsBySimpleGetCall("square", "retrofit"); listCall.enqueue(new Callback<List<Contributor>>() { @Override public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) { for (Contributor contributor:response.body()){ Log.i("contributor",contributor.getLogin()); } } @Override public void onFailure(Call<List<Contributor>> call, Throwable t) { } }); } @Override protected void setupAppComponent(AppComponent appComponent) { appComponent.inject(this); } @Override protected int getLayoutId() { return R.layout.activity_main; } }
@Component(modules = {AppModule.class,GitHubApiModule.class}) public interface AppComponent { void inject(MainActivity activity); }
@Module public class AppModule { APPApplication appApplication; public AppModule(APPApplication appApplication) { this.appApplication = appApplication; } @Provides public APPApplication getAppApplication() { return appApplication; } }
@Module public class GitHubApiModule { @Provides public OkHttpClient provideOkHttpClient(){ OkHttpClient okHttpClient=new OkHttpClient.Builder() .connectTimeout(60*1000,TimeUnit.MILLISECONDS)//设置连接超时时间 .readTimeout(60*1000,TimeUnit.MICROSECONDS)//设置读取超时时间 .build(); return okHttpClient; } @Provides public Retrofit getRetrofit(APPApplication appApplication, OkHttpClient okHttpClient){ Retrofit retrofit=new Retrofit.Builder() .baseUrl(appApplication.getString(R.string.base_url)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient) .build(); return retrofit; } @Provides public GitHubApiService provideGitHubApiService(Retrofit retrofit){ return retrofit.create(GitHubApiService.class); } }
解决方案
20
是不是你没有在manifests 里面使用这个APPApplication