- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我知道有很多关于nullpointexeception的问题,但如果我能找到错误的地方,我就不会在这里问这个问题。所以当我来到列表底部并尝试使用方法加载更多数据时,我收到了这个错误。我正在用 recyclerview 做这件事。所以第一次,所有数据都已加载,但当我尝试加载更多数据时,出现标题中提到的错误。这是代码:
public class ProfileUserFragment extends Fragment implements OnBackPressedListener {
private ResideMenu resideMenu;
private SmoothRecyclerView mRecyclerView;
private PostListAdapter mAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View parentView = inflater.inflate(R.layout.fragment_profile, container, false);
setUpViews(parentView);
initList(parentView);
return parentView;
}
private void initList(View view) {
bindData();
mRecyclerView = (SmoothRecyclerView) view.findViewById(R.id.list);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(manager);
mRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration(getActivity()));
mAdapter = new PostListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
// Load more data when user reach bottom
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
// add null , so the adapter will check view_type and show progress bar at bottom
mPosts.add(null);
mAdapter.notifyItemInserted(mPosts.size() - 1);
// Load data
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Remove loading item
mPosts.remove(mPosts.size() - 1);
mAdapter.notifyItemRemoved(mPosts.size());
// Load data
int start = mPosts.size();
int end = start + 20;
for (int i = start + 1; i <= end; i++) {
Post post = new Post();
post.setTitle("Title ");
post.setDesc("Desc ");
post.setTimestamp("Time ");
mPosts.add(post);
}
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
}
}, 2000);
}
});
}
private void setUpViews(View view) {
HomeActivity parentActivity = (HomeActivity) getActivity();
resideMenu = parentActivity.getResideMenu();
ImageButton imageButton = (ImageButton) view.findViewById(R.id.drawer_menu);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
}
});
}
private void bindData() {
mPosts.clear();
for (int i = 1; i <= 20; i++) {
Post post = new Post();
post.setTitle("Title " + i);
post.setDesc("Desc " + i);
post.setTimestamp("Time " + i);
mPosts.add(post);
}
}
@Override
public void onBackPressed() {
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
}
private List<Post> mPosts = new ArrayList<>();
public class PostListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private OnLoadMoreListener mOnLoadMoreListener;
private final int VIEW_TYPE_ITEM = 0;
private final int VIEW_TYPE_LOADING = 1;
private boolean isLoading;
private int visibleThreshold = 2;
private int lastVisibleItem, totalItemCount;
public PostListAdapter(Context context) {
this.mContext = context;
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
if (mOnLoadMoreListener != null) {
mOnLoadMoreListener.onLoadMore();
}
isLoading = true;
}
}
});
}
public void setOnLoadMoreListener(OnLoadMoreListener mOnLoadMoreListener) {
this.mOnLoadMoreListener = mOnLoadMoreListener;
}
@Override
public int getItemViewType(int position) {
return mPosts == null ? VIEW_TYPE_LOADING : VIEW_TYPE_ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder vh = null;
if (viewType == VIEW_TYPE_ITEM) {
View view = LayoutInflater.from(mContext).inflate(
R.layout.post_list_item,
parent,
false);
vh = new PostHolder(view);
} else if (viewType == VIEW_TYPE_LOADING){
View view = LayoutInflater.from(mContext).inflate(
R.layout.progress_bar,
parent,
false);
vh = new LoadingHolder(view);
}
return vh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof PostHolder) {
PostHolder postHolder = (PostHolder) holder;
Post post = mPosts.get(position);
postHolder.tvPostTitle.setText(post.getTitle());
postHolder.tvPostDesc.setText(post.getDesc());
postHolder.tvPostTimestamp.setText(post.getTimestamp());
} else if (holder instanceof LoadingHolder) {
LoadingHolder loadingHolder = (LoadingHolder) holder;
loadingHolder.mProgressBar.setIndeterminate(true);
}
}
@Override
public int getItemCount() {
return mPosts == null ? 0 : mPosts.size();
}
public class PostHolder extends RecyclerView.ViewHolder {
MyTextView tvPostTitle;
MySecondTextView tvPostTimestamp, tvPostDesc;
public PostHolder(View view) {
super(view);
tvPostTitle = (MyTextView) view.findViewById(R.id.tv_post_title);
tvPostDesc = (MySecondTextView) view.findViewById(R.id.tv_post_desc);
tvPostTimestamp = (MySecondTextView) view.findViewById(R.id.tv_created_at);
}
}
public class LoadingHolder extends RecyclerView.ViewHolder {
ProgressBar mProgressBar;
public LoadingHolder(View view) {
super(view);
mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar1);
}
}
public void setLoaded() {
isLoading = false;
}
}
}
这是我遇到的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.solaris.timster.model.Post.getTitle()' on a null object reference
at com.solaris.timster.fragments.ProfileUserFragment$PostListAdapter.onBindViewHolder(ProfileUserFragment.java:191)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1180)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1031)
at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4061)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
at android.view.Choreographer.doCallbacks(Choreographer.java:695)
at android.view.Choreographer.doFrame(Choreographer.java:628)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Solaris 中的“\t”或“\r\t”是制表符吗?换行字符序列\n 或\r\n ? 谢谢 最佳答案 \t = 制表符 \r = 回车 \n =换行 Solaris 标准行分隔符是\n 关于sola
我需要找出 Solaris 盒子的硬盘驱动器名称,但我不清楚设备名称是什么。在 Linux 上,它类似于 /dev/hda 或 /dev/sda,但在 Solaris 上,我对分区和设备的名称有点迷失
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我使用 mmap(只是尝试了解 mmap 的工作原理)来分配 96k 匿名内存,但看起来它将 96k 分成了 64k 和 32k。但是当分配960k时,它只分配一个大小为960k的chunk。什么时候
可用于 OpenSolaris 的源代码对于了解 Solaris 的内部结构(以及 dtrace 和 mdb)非常有用。然而,据我所知,没有办法准确地找出 OpenSolaris 源代码与作为 Sol
我在configure.ac中声明了一个变量: MY_VERSION="0:0:0" AC_SUBST(MY_VERSION) AC_MSG_NOTICE([$MY_VERSION]) 变量的值在./
我试过使用 /string1\|string2 没用。 尝试过 /字符串1|字符串2 没用。 有什么帮助吗? 最佳答案 您必须将“交替”放在\(...\) 的“分组”中。这应该有效: /\(strin
Solaris 中的某些命令(如 iostat)使用磁盘名称(如 sd0 或 sdd2)报告磁盘相关信息。是否有一致的方法将这些名称映射回标准/dev/dsk/c?t?d?s? Solaris 中的磁
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
如何在solaris 11中生成UUID? 在 Solaris 10 中,我使用 makeuuid 命令生成。 我在 solaris 11 中找不到它,而它根据 oracle 文档存在 https:/
我正在将 Solaris 10 应用程序迁移到 RHEL。该应用程序使用某些特定于 Solaris 的函数,我在 Linux 上找不到等效函数。 void double_to_decimal(doub
在 Solaris 上,我似乎需要单引号 'a match the beginning of line' 表达式: > sh $ echo offset 0.000000 2>&1 | grep
我正在尝试运行一个旧的 Solaris SPARC 应用程序。 我从this question中学到了x86 Solaris 不会削减它。我最近了解到 VM virtualbox 不能模拟 SPARC
我正在将我们的应用程序从solaris sparc 移植到solaris x86,并且我遇到了这两种体系结构之间的结构大小差异。例如;我有一个类似的结构 typedef struct mystruct
在 linx CShell 上工作时,您可以选择按向上/向下箭头来选择最后键入的命令或命令缓冲区。这甚至适用于 Windows。 但是,在我最近切换到的 Solaris 上工作时,这不起作用。我猜 s
在 Solaris 上,我似乎需要单引号 'a match the beginning of line' 表达式: > sh $ echo offset 0.000000 2>&1 | grep
我正在尝试运行一个旧的 Solaris SPARC 应用程序。 我从this question中学到了x86 Solaris 不会削减它。我最近了解到 VM virtualbox 不能模拟 SPARC
Qt 页面没有列出用于 Solaris 的预编译 Qt 5 包。四处搜索,它似乎也没有包含在流行的软件包存储库 OpenCSW 中。一些谷歌搜索表明在 Solaris 下构建 Qt 5 涉及在 Sol
全部, 我们正在 WebLogic 服务器 9.2 MP2 上运行 J2EE 应用程序,并在 Solaris 10 上使用 jrockit 64 位 JVM (27.3.1)。 我们调用userunt
我正在尝试从 http://ftp.gnu.org/gnu/binutils 构建 binutils 2.21.1a在 Solaris sun4u sparc SunOS 5.10 上。我正在使用 g
我是一名优秀的程序员,十分优秀!