ich eine Netzwerkkomponente in meiner app zu injizieren, die mich Nachrüstung meine Aktivitäten & Fragmente injizieren kann, ich es zu meinem Job-Klasse injizieren wollte, ist hier, was ich tatDer Versuch, eine Jobklasse
netComponent Schnittstelle :
@Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
void inject(MainActivity activity);
void inject(SplashActivity activity);
void inject(RegisterActivity activity);
void inject(SettingsFragment fragment);
void inject(Context cont); // also tried void inject(Job job);
}
Und in meinem Job Klasse i es so injizieren:
public class LogUploader extends Job {
public static final String TAG = "UPLOAD_LOGS" ;
@Inject
Retrofit mRetrofitClient;
@Override
@NonNull
protected Result onRunJob(Params params) {
((MyApp) getContext()).getNetComponent().inject(getContext());
// run your job here
Log.e("LogFile", " "+ TAG);
//// TODO: 10/18/2017 send log
checklogs(this.getContext());
//// TODO: 10/18/2017 get phone db update
return Result.SUCCESS;
}
}
Und der Absturz:
ClassCastException: com.evernote.android.job.v21.PlatformJobService cannot be cast to com.**.**.Application.MyApp
Irgendwelche Ideen was soll ich anders machen? Danke an alle Helfer!
UPDATE
Der erste Crash (CCE) war, weil ich getContext tat und warf es auf MyApp, habe ich es zu
((MyApp) this.getContext().getApplicationContext()).getNetComponent().inject(getContext());
Jetzt ist der Absturz macht mehr Sinn:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object retrofit2.Retrofit.create(java.lang.Class)' on a null object reference
Ich überprüft mit dem Debug, injiziert die injection line nicht mRetrofitClient
Irgendwelche Ideen?
NetModule Klasse:
@Module
public class NetModule {
String mBaseUrl;
// Constructor needs one parameter to instantiate.
public NetModule(String baseUrl) {
this.mBaseUrl = baseUrl;
}
// Dagger will only look for methods annotated with @Provides
@Provides
@Singleton
// Application reference must come from AppModule.class
SharedPreferences providesSharedPreferences(Application application) {
return PreferenceManager.getDefaultSharedPreferences(application);
}
@Provides
@Singleton
Cache provideOkHttpCache(Application application) {
int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(application.getCacheDir(), cacheSize);
return cache;
}
@Provides
@Singleton
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
return gsonBuilder.create();
}
@Provides
@Singleton
OkHttpClient provideOkHttpClient(Cache cache) {
OkHttpClient client = new OkHttpClient().newBuilder().cache(cache).build();
return client;
}
@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(mBaseUrl)
.client(okHttpClient)
.build();
return retrofit;
}
}
bitte fügen Sie die Nachrüstlogik hinzu. –
hat das ganze Netzmodul hinzugefügt, danke – yanivtwin
Bitte geben Sie die volle Stapelspur Ihrer NPE an – crgarridos