An open source app that is refactored to demo Paging Library from Android Jetpack
The detailed implementation of the app can be found here
An open source app that is refactored to demo Paging Library from Android Jetpack
An open source app that is refactored to demo Paging Library from Android Jetpack
The detailed implementation of the app can be found here
Tried to test your code and here's the stack trace:
"java.lang.IndexOutOfBoundsException: setSpan (73 ... 14) has end before start"
this line of code:
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context.getApplicationContext(), R.color.secondary_text)), titleString.lastIndexOf(author) + author.length() + 1, titleString.lastIndexOf(article.getTitle()) - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
I think you forget commit CircleImageView and CustomTextView
07-11 12:39:26.967 5858-5858/com.an.paginglibrary.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.an.paginglibrary.sample, PID: 5858
android.view.InflateException: Binary XML file line #22: Error inflating class com.an.paginglibrary.sample.views.CircleImageView
at android.view.LayoutInflater.createView(LayoutInflater.java:637)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:747)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:508)
at android.view.LayoutInflater.inflate(LayoutInflater.java:418)
at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
at com.an.paginglibrary.sample.databinding.FeedItemBinding.inflate(FeedItemBinding.java:127)
at com.an.paginglibrary.sample.databinding.FeedItemBinding.inflate(FeedItemBinding.java:123)
at com.an.paginglibrary.sample.adapters.FeedListAdapter.onCreateViewHolder(FeedListAdapter.java:45)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6685)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5869)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:606)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15701)
at android.view.ViewGroup.layout(ViewGroup.java:5041)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2130)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1887)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1104)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5962)
at
Thanks a lot, i have read your article and very nice, but i have some question to you, i want to implement SwipeRefresh in paging, and i try to invalidate
the liveDataSource
but when invalidate
, adapter empty and display again after load finish. can you give me an idea when start refresh
, adapter not empty , adapter will be replace after refresh finish
Got this exception while using Retrofit.So i have changed some code in Class RestApiFactory
` public static OkHttpClient.Builder getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@OverRide
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return builder;
} catch (Exception e) {
throw new RuntimeException(e);
}
}`
and updated retrofit as
Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(getUnsafeOkHttpClient().build()) // i changed here
.build();
now its working perfectly..
Where is FeedItemBinding class in your project?
First thanks to you for this tutorial application.
I am curious about to know some items that you have used in this application. those are follows.
why we set setFetchExecutor to LivePagedListBuilder in FeedViewModel Class?
What does executor = Executors.newFixedThreadPool(5) means ?
After testing on mobile and i switched of the internet got the dialog. i need to reloaded network request again. where to do that ?
swipe to refresh is not working. any idea ?
question list is so big!!
Thanks in advance.
when i initial set adapter, the initial loader is not shown
Please add test cases using Mockito.
Hi, i am not able to launch app.
Receiving below issue in logcat. I looked for solutions and tried them but still got the same error.
07-07 11:28:03.513 18254-18254/com.an.paginglibrary.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.an.paginglibrary.sample, PID: 18254
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.an.paginglibrary.sample/com.an.paginglibrary.sample.activity.FeedActivity}: java.lang.RuntimeException: Cannot create an instance of class com.an.paginglibrary.sample.viewmodel.FeedViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2678)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2743)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1490)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.an.paginglibrary.sample.viewmodel.FeedViewModel
at android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:153)
at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:210)
at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)
at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)
at com.an.paginglibrary.sample.activity.FeedActivity.onCreate(FeedActivity.java:36)
at android.app.Activity.performCreate(Activity.java:6687)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2631)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2743)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1490)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
Caused by: java.lang.InstantiationException: java.lang.Class<com.an.paginglibrary.sample.viewmodel.FeedViewModel> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:151)
at android.arch.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:210)
at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)
at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)
at com.an.paginglibrary.sample.activity.FeedActivity.onCreate(FeedActivity.java:36)
at android.app.Activity.performCreate(Activity.java:6687)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2631)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2743)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1490)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
I did not found the following files
databinding.NetworkItemBinding
databinding.FeedItemBinding
java.net.UnknownHostException: Unable to resolve host "newsapi.org": No address associated with hostname
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.