Skip to content

Instantly share code, notes, and snippets.

View shahbazahmed1269's full-sized avatar
:octocat:

Shahbaz Ahmed shahbazahmed1269

:octocat:
View GitHub Profile
@shahbazahmed1269
shahbazahmed1269 / AppModule.java
Created June 10, 2017 05:52
Part of my 2nd blog post on architecture components and MVVM
@Module
public class AppModule {
public static final String BASE_URL = "https://api.github.com/";
@Provides
@Singleton
GithubApiService provideGithubApiService() {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
@shahbazahmed1269
shahbazahmed1269 / ListIssuesViewModelWithDI.java
Created June 10, 2017 05:45
Part of my 2nd blog post on architecture components and MVVM
public class ListIssuesViewModel extends ViewModel {
private IssueRepository mIssueRepository;
// Other member declarations
public ListIssuesViewModel(IssueRepository repository) {
mIssueRepository = repository;
// Other code
}
// Other code
@shahbazahmed1269
shahbazahmed1269 / ListIssuesViewModelnoDI.java
Created June 10, 2017 05:43
Part of my 2nd blog post on architecture components and MVVM
public class ListIssuesViewModel extends ViewModel {
private IssueRepository mIssueRepository;
// Other member declarations
public ListIssuesViewModel() {
mIssueRepository = new IssueRepositoryImpl();
// Other code
}
// Other code
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewModel = ViewModelProviders.of(this).get(ListIssuesViewModel.class);
setupView();
// Handle changes emitted by LiveData
mViewModel.getRes().observe(this, apiResponse -> {
public class ListIssuesViewModel extends ViewModel {
private MediatorLiveData<ApiResponse> mApiResponse;
private IssueRepository mIssueRepository;
// No argument constructor
public ListIssuesViewModel() {
mApiResponse = new MediatorLiveData<>();
mIssueRepository = new IssueRepositoryImpl();
}
public class IssueRepositoryImpl implements IssueRepository {
public static final String BASE_URL = "https://api.github.com/";
private GithubApiService mApiService;
public IssueRepositoryImpl() {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
public interface IssueRepository {
LiveData<ApiResponse> getIssues(String owner, String repo);
}
public interface GithubApiService {
@GET("/repos/{owner}/{repo}/issues")
Call<List<Issue>> getIssues(@Path("owner") String owner, @Path("repo") String repo);
}
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'android.arch.lifecycle:runtime:1.0.0'
compile 'android.arch.lifecycle:extensions:1.0.0-alpha9-1'
annotationProcessor 'android.arch.lifecycle:compiler:1.0.0-alpha9-1'
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}