- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用较新版本的分页库。我正在使用截击从网络中获取我的数据。每当我从网络中获取数据时,都会获取数据,但是当调用转到观察者时,显示的列表大小为零。我不确定我做错了什么。
我是 android 的新手,所以对分页了解不多。自从我尝试以来已经好几天了,但仍然无法弄清楚。
我的gradle如下
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.athansys.mypagingapplication"
minSdkVersion 22
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.volley:volley:1.1.0'
implementation 'com.google.code.gson:gson:2.8.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "android.arch.paging:runtime:1.0.1"
implementation "android.arch.lifecycle:runtime:1.1.1"
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
我的 MainActivity 看起来像:
package com.example.athansys.mypagingapplication;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.arch.paging.PagedList;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private MyPatientAdapter mPatientAdapter;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FilterModel viewModel = ViewModelProviders.of(this).get(FilterModel.class);
viewModel.getData(this).observe(this, new Observer<PagedList<FilterPatientList>>() {
@Override
public void onChanged(@Nullable PagedList<FilterPatientList> results) {
mPatientAdapter.submitList(results);
//mPatientAdapter.setList(results);
mPatientAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(mPatientAdapter);
}
});
}
private void setAdapter() {
mRecyclerView = findViewById(R.id.my_patient_recycler_view);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mPatientAdapter = new MyPatientAdapter();
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(mPatientAdapter);
}
}
FilterModel类如下:
package com.example.athansys.mypagingapplication;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel;
import android.arch.paging.LivePagedListBuilder;
import android.arch.paging.PagedList;
import android.content.Context;
import android.util.Log;
public class FilterModel extends ViewModel {
private LiveData<PagedList<FilterPatientList>> listLiveData;
LiveData<PagedList<FilterPatientList>> getData(Context context) {
if (listLiveData == null) {
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder()).setEnablePlaceholders(false)
.setPrefetchDistance(5)
.setPageSize(1).build();
listLiveData = new LivePagedListBuilder<>
(new MyPatientPagedListProvider(context)
.getAll()
, pagedListConfig).
build();
}
return listLiveData;
}
}
MyProvider 类是:
package com.example.athansys.mypagingapplication;
import android.arch.paging.DataSource;
import android.arch.paging.LivePagedListProvider;
import android.content.Context;
import android.util.Log;
import java.util.List;
public class MyPatientPagedListProvider {
Context mBaseContext;
public MyPatientPagedListProvider(Context context) {
mBaseContext = context;
dataClass.getContextInstance(context);
}
private static final String TAG = MyPatientPagedListProvider.class.getName();
MyPatientData dataClass = new MyPatientData() {
@Override
public List<FilterPatientList> convertToItems(List<FilterPatientList> result, int size) {
return result;
}
};
public LivePagedListProvider<Integer, FilterPatientList> getAll() {
return new LivePagedListProvider<Integer, FilterPatientList>() {
@Override
protected DataSource<Integer, FilterPatientList> createDataSource() {
return dataClass;
}
};
}
}
MyDataSource如下:
package com.example.athansys.mypagingapplication;
import android.arch.paging.TiledDataSource;
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class MyPatientData extends TiledDataSource<FilterPatientList> {
private Context mContext;
private List<FilterPatientList> patientList;
@Override
public int countItems() {
return 10;
}
@Override
public List<FilterPatientList> loadRange(int startPosition, int count) {
String url = "My URl";
return postStringRequestForMyPatient(url);
}
public List<FilterPatientList> postStringRequestForMyPatient(String url) {
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
String data = jsonObject.getString("patientsfordoctor");
mPatientsForDoctor = new Gson().fromJson(data, PatientsForDoctor.class);
mPatientList = new ArrayList<>();
mPatientList.addAll(mPatientsForDoctor.getPatientList());
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return super.getParams();
}
@Override
public String getBodyContentType() {
return super.getBodyContentType();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return new HashMap<>();
}
};
stringRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(mContext).add(stringRequest);
}
void getContextInstance(Context context) {
mContext = context;
}
public abstract List<FilterPatientList> convertToItems(List<FilterPatientList> result, int size);
}
我的适配器类
package com.example.athansys.mypagingapplication;
import android.arch.paging.PagedListAdapter;
import android.support.annotation.NonNull;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyPatientAdapter extends PagedListAdapter<FilterPatientList, MyPatientAdapter.PatientViewHolder> {
protected MyPatientAdapter() {
super(FilterPatientList.DIFF_CALLBACK);
}
@NonNull
@Override
public PatientViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull PatientViewHolder holder, int position) {
}
class PatientViewHolder extends RecyclerView.ViewHolder {
TextView patientName, patientPhoneNumber, genderAge;
PatientViewHolder(View itemView) {
super(itemView);
}
}
}
我的POJO(模型类如下)
FilterPatientList 类:
package com.example.athansys.mypagingapplication;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v7.util.DiffUtil;
import com.google.gson.annotations.SerializedName;
public class FilterPatientList implements Parcelable {
private long patientId;
private Patient patientDetails;
protected FilterPatientList(Parcel in) {
patientId = in.readLong();
patientDetails = in.readParcelable(Patient.class.getClassLoader());
}
public static final Creator<FilterPatientList> CREATOR = new Creator<FilterPatientList>() {
@Override
public FilterPatientList createFromParcel(Parcel in) {
return new FilterPatientList(in);
}
@Override
public FilterPatientList[] newArray(int size) {
return new FilterPatientList[size];
}
};
public long getPatientId() {
return patientId;
}
public void setPatientId(long patientId) {
this.patientId = patientId;
}
public Patient getPatientDetails() {
return patientDetails;
}
public void setPatientDetails(Patient patientDetails) {
this.patientDetails = patientDetails;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(patientId);
dest.writeParcelable(patientDetails, flags);
}
public static final DiffUtil.ItemCallback<FilterPatientList> DIFF_CALLBACK = new DiffUtil.ItemCallback<FilterPatientList>() {
@Override
public boolean areItemsTheSame(FilterPatientList oldItem, FilterPatientList newItem) {
return false;
}
@Override
public boolean areContentsTheSame(FilterPatientList oldItem, FilterPatientList newItem) {
return false;
}
};
}
患者类别:
package com.example.athansys.mypagingapplication;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
public class Patient implements Parcelable{
private long localPatientId;
private long apptDoctorId;
private long patientId;
private boolean isLocalPatient;
private String firstName;
private String lastName;
private String phoneNumber;
private String email;
private String dob;
private int age;
private int height;
private int weight;
private String patientSex;
private String patientSystemRegistrationDate;
private int bloodGroup;
protected Patient(Parcel in) {
localPatientId = in.readLong();
apptDoctorId = in.readLong();
patientId = in.readLong();
isLocalPatient = in.readByte() != 0;
firstName = in.readString();
lastName = in.readString();
phoneNumber = in.readString();
email = in.readString();
dob = in.readString();
age = in.readInt();
height = in.readInt();
weight = in.readInt();
patientSex = in.readString();
patientSystemRegistrationDate = in.readString();
bloodGroup = in.readInt();
}
public static final Creator<Patient> CREATOR = new Creator<Patient>() {
@Override
public Patient createFromParcel(Parcel in) {
return new Patient(in);
}
@Override
public Patient[] newArray(int size) {
return new Patient[size];
}
};
public long getLocalPatientId() {
return localPatientId;
}
public void setLocalPatientId(long localPatientId) {
this.localPatientId = localPatientId;
}
public long getApptDoctorId() {
return apptDoctorId;
}
public void setApptDoctorId(long apptDoctorId) {
this.apptDoctorId = apptDoctorId;
}
public long getPatientId() {
return patientId;
}
public void setPatientId(long patientId) {
this.patientId = patientId;
}
public boolean isLocalPatient() {
return isLocalPatient;
}
public void setLocalPatient(boolean localPatient) {
isLocalPatient = localPatient;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getPatientSex() {
return patientSex;
}
public void setPatientSex(String patientSex) {
this.patientSex = patientSex;
}
public String getPatientSystemRegistrationDate() {
return patientSystemRegistrationDate;
}
public void setPatientSystemRegistrationDate(String patientSystemRegistrationDate) {
this.patientSystemRegistrationDate = patientSystemRegistrationDate;
}
public int getBloodGroup() {
return bloodGroup;
}
public void setBloodGroup(int bloodGroup) {
this.bloodGroup = bloodGroup;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(localPatientId);
dest.writeLong(apptDoctorId);
dest.writeLong(patientId);
dest.writeByte((byte) (isLocalPatient ? 1 : 0));
dest.writeString(firstName);
dest.writeString(lastName);
dest.writeString(phoneNumber);
dest.writeString(email);
dest.writeString(dob);
dest.writeInt(age);
dest.writeInt(height);
dest.writeInt(weight);
dest.writeString(patientSex);
dest.writeString(patientSystemRegistrationDate);
dest.writeInt(bloodGroup);
}
}
当我在数据源类 (MyPatientData) 中从网络接收数据时,调用会自动转到主 Activity 中的观察者。此处显示的列表大小为零,而从网络获取的列表大小为 10 个项目。
你能帮帮我吗?我真的被困了好几天不知道下一步该怎么做。非常感谢。 :)
最佳答案
您可以在 LivePagedListBuilder 中实现 BoundaryCallback。它包含 onZeroItemsLoaded 方法。
listLiveData = new LivePagedListBuilder<>
(new MyPatientPagedListProvider(context)
.getAll()
, pagedListConfig)
.setBoundaryCallback(new PagedList.BoundaryCallback() {
@Override
public void onZeroItemsLoaded() {
super.onZeroItemsLoaded();
// do smth here. For example, post boolean value to MutableLiveData to notify activity //that result is empty
}
})
.build();
关于java - 使用分页库时,观察者将列表大小显示为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51476624/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!