- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不知道问题出在哪里有人可以帮助我这是我的回收站 View 的问题我从改造 Web 服务中获取 valus 然后将其应用于适配器
这是我的主要代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
imgAttachment=(ImageView)findViewById(R.id.img_attachment);
imgSend=(ImageView)findViewById(R.id.img_send);
etMessage=(EditText)findViewById(R.id.et_message);
//get user data
UserPhone userPhone=new UserPhone();
userPhone.phone=getIntent().getExtras().getString("receiverNumber");
WebService.getInstance().getApi().getUserData(userPhone).enqueue(new Callback<UserDataResponse>() {
@Override
public void onResponse(Call<UserDataResponse> call, Response<UserDataResponse> response) {
receiverId=response.body().getUserId();
AllMessages allMessages=new AllMessages();
allMessages.receiverID=receiverId;
allMessages.senderID=MainActivity.userId;
WebService.getInstance().getApi().getMessages(allMessages).enqueue(new Callback<List<Message>>() {
@Override
public void onResponse(Call<List<Message>> call, Response<List<Message>> response) {
messages=response.body();
recyclerChat=(RecyclerView)findViewById(R.id.recycler_chat);
LinearLayoutManager layoutManager = new LinearLayoutManager(ChatActivity.this);
recyclerChat.setLayoutManager(layoutManager);
adapter=new MessagingAdapter(messages,ChatActivity.this);
recyclerChat.setAdapter(adapter);
recyclerChat.scrollToPosition(messages.size()-1);
}
@Override
public void onFailure(Call<List<Message>> call, Throwable t) {
}
});
}
@Override
public void onFailure(Call<UserDataResponse> call, Throwable t) {
}
});
//end of get user data
}
这是我的日志
06-20 11:01:09.680 27852-27852/net.paymac.chatty D/ViewRootImpl: ViewPostImeInputStage processPointer 0
06-20 11:01:09.700 27852-27852/net.paymac.chatty D/ViewRootImpl: ViewPostImeInputStage processPointer 1
06-20 11:01:09.710 27852-27852/net.paymac.chatty I/Timeline: Timeline: Activity_launch_request id:net.paymac.chatty time:91556150
06-20 11:01:09.730 27852-27893/net.paymac.chatty D/FA: Logging event (FE): _e, Bundle[{_o=auto, _et=9473, _sc=MainActivity, _si=4899456373428156394}]
06-20 11:01:09.890 27852-27852/net.paymac.chatty D/SecWifiDisplayUtil: Metadata value : none
06-20 11:01:09.890 27852-27852/net.paymac.chatty D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{b89463c I.E...... R.....ID 0,0-0,0}
06-20 11:01:09.960 27852-27852/net.paymac.chatty E/RecyclerView: No adapter attached; skipping layout
06-20 11:01:09.960 27852-27893/net.paymac.chatty D/FA: Connected to remote service
06-20 11:01:09.960 27852-27852/net.paymac.chatty D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
06-20 11:01:09.980 27852-27852/net.paymac.chatty E/RecyclerView: No adapter attached; skipping layout
06-20 11:01:09.980 27852-27852/net.paymac.chatty W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
06-20 11:01:09.980 27852-27852/net.paymac.chatty W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
06-20 11:01:10.240 27852-27852/net.paymac.chatty I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@675702f time:91556688
06-20 11:01:10.930 27852-27852/net.paymac.chatty D/AndroidRuntime: Shutting down VM
06-20 11:01:10.930 27852-27852/net.paymac.chatty E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.paymac.chatty, PID: 27852
java.lang.NullPointerException: Attempt to write to field 'int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null object reference
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6368)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5555)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3025)
at android.view.View.measure(View.java:20151)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:20151)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:20151)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:20151)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:20151)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:20151)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3158)
at android.view.View.measure(View.java:20151)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2594)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1549)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1841)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
at android.view.Choreographer.doCallbacks(Choreographer.java:695)
at android.view.Choreographer.doFrame(Choreographer.java:631)
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:7225)
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)
我的适配器
public class MessagingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Message> messages;
private Context context;
/**
* Constructor for Adapter
*
* @param messages list of messages will showed
* @param context context
*/
public MessagingAdapter(List<Message> messages, Context context) {
this.messages = messages;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/**
* check the type of view and return holder
*/
if (viewType == MessageType.SENT_TEXT) {
return new SentTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_sent, parent, false));
} else if (viewType == MessageType.SENT_IMAGE) {
return new SentImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_sent_img, parent, false));
} else if (viewType == MessageType.RECEIVED_TEXT) {
return new ReceivedTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_recieved, parent, false));
} else if (viewType == MessageType.RECEIVED_IMAGE) {
return new ReceivedImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_received_img, parent, false));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder mHolder, int position) {
int type = getItemViewType(position);
Message message = messages.get(position);
/**
* check message type and init holder to user it and set data in the right place for every view
*/
if (type == MessageType.SENT_TEXT) {
SentTextHolder holder = (SentTextHolder) mHolder;
holder.tvTime.setText(message.getTime());
holder.tvMessageContent.setText(message.getContent());
} else if (type == MessageType.SENT_IMAGE) {
//SentImageHolder holder = (SentImageHolder) mHolder;
//holder.tvTime.setText(message.getTime());
//Glide.with(context).load(Urls.IMAGES_URL + message.getContent()).into(holder.imgMsg);
} else if (type == MessageType.RECEIVED_TEXT) {
ReceivedTextHolder holder = (ReceivedTextHolder) mHolder;
holder.tvTime.setText(message.getTime());
holder.tvMessageContent.setText(message.getContent());
} else if (type == MessageType.RECEIVED_IMAGE) {
//ReceivedImageHolder holder = (ReceivedImageHolder) mHolder;
//holder.tvTime.setText(message.getTime());
//holder.tvUsername.setText(message.getUsername());
//Glide.with(context).load(Urls.IMAGES_URL + message.getContent()).into(holder.imgMsg);
}
}
@Override
public int getItemCount() {
return messages.size();
}
@Override
public int getItemViewType(int position) {
/**
* check the user id to detect if message sent or received
* then check if message is text or img
*/
String userID = MainActivity.userId;
Message message = messages.get(position);
if (userID == message.getUserId()) {
if (message.getType().equals("1")) {
return MessageType.SENT_TEXT;
} else if (message.getType().equals("2")) {
return MessageType.SENT_IMAGE;
}
} else {
if (message.getType().equals("1")) {
return MessageType.RECEIVED_TEXT;
} else if (message.getType().equals("2")) {
return MessageType.RECEIVED_IMAGE;
}
}
return super.getItemViewType(position);
}
// sent message holders
class SentMessageHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_time)
TextView tvTime;
public SentMessageHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
// sent message with type text
class SentTextHolder extends SentMessageHolder {
@BindView(R.id.tv_message_content)
TextView tvMessageContent;
public SentTextHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
// sent message with type image
class SentImageHolder extends SentMessageHolder {
@BindView(R.id.img_msg)
ImageView imgMsg;
public SentImageHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
// received message holders
class ReceivedMessageHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_username)
TextView tvUsername;
@BindView(R.id.tv_time)
TextView tvTime;
public ReceivedMessageHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
// received message with type text
class ReceivedTextHolder extends ReceivedMessageHolder {
@BindView(R.id.tv_message_content)
TextView tvMessageContent;
public ReceivedTextHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
// received message with type image
class ReceivedImageHolder extends ReceivedMessageHolder {
@BindView(R.id.img_msg)
ImageView imgMsg;
public ReceivedImageHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
最佳答案
您可能在适配器类的 onCreateViewHolder 上返回 null
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/**
* check the type of view and return holder
*/
if (viewType == MessageType.SENT_TEXT) {
return new SentTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_sent, parent, false));
} else if (viewType == MessageType.SENT_IMAGE) {
return new SentImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_sent_img, parent, false));
} else if (viewType == MessageType.RECEIVED_TEXT) {
return new ReceivedTextHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_recieved, parent, false));
} else if (viewType == MessageType.RECEIVED_IMAGE) {
return new ReceivedImageHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_received_img, parent, false));
}
return null; // This shouldn't return null in any case or error
// will be thrown.
}
关于java.lang.NullPointerException : Attempt to write to field 'int android. 支持.v7.widget.RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648586/
我有一个 k*n矩阵 X 和 k*k矩阵A。对于X的每一列,我想计算标量 X[:, i].T.dot(A).dot(X[:, i]) (或者,数学上, Xi' * A * Xi )。 目前,我有一个
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是 VueJS 的新手。我已经使用 vuetify/webpack-ssr 模板创建了一个项目,现在我想创建一个登录页面,但是没有显示表单,控制台给了我以下信息: [Vue warn]: Unkno
我尝试将 value 插入到 C++ vector v 之前的第 i 元素(或元素 (i-1) 之后) )。代码很简单 v.insert(v.begin() + i, value); 我确信当 i 介
我需要显示使用合并排序算法排序的 vector 。然而,当我使用 v.begin() 时,我的 friend 使用 v.data() 来传递 vector 。他的代码运行良好,而我的却不行。请解释。
这是我的命令(url1、url2、url3、url4 是占位符): ffmpeg -i url1 -i url2 -i url3 -i url4 -filter_complex “[1:v:0] [1
我以前用过Vue,我知道怎么用v-for渲染元素序列,v-if或v-show有条件地显示元素,并且 v-model例如,控制段落的内容。 但现在我需要对 DOM 进行更精细的控制: 我有一个range
我正在学习所有权和借用。 borrow1 和borrow2 的区别在于在borrow2 打印时使用了&: fn borrow1(v: &Vec) { println!("{}", &v[10]
我找不到一种方法来选择不同的选项来渲染 v-for 中的文本。是否有可能或者我是否需要以不同的方式构建逻辑来执行类似于下面的代码的操作? // i
Iterable 的三个直接子类型是 Map , Seq , 和 Set .除了性能问题之外,似乎还有一个 Seq是从整数到值的映射,以及 Set是从值到 bool 值的映射(如果值在集合中,则为 t
我想应用一个计算方法,如果键存在则增加值,否则将 1。有 Map map = new HashMap<>(); 我不明白为什么 for (int i = 0; i v != null ? v++ :
标准(IEEE 754/C)是否保证以下代码断言永远不会失败? int main() { for ( /* all possible float / double values */ )
代码由Vue语言编写,使用Element-ui框架, 如果一个对象包含某些内容,则会显示该内容,如果不包含则禁用菜单按钮。 输出应该是这样的: a、b(禁用)、c、d、e 但我的是这样的: a、a(禁
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
我将 Vue.js 与 Vuetify 一起使用,我正在尝试使用 v-data-table 从后端加载菜单列表并使用 对其设置一些权限v-switches 但我在尝试 v-model 数组时遇到问题:
我在 Java 的流式操作中努力维护我想要的数据结构,这很可能是由于缺乏正确的理解和实践。 public class Main { public static void main(String
我正在尝试为匹配中的每个匹配呈现一些 HTML,但是,我不太确定 实际上是正确的。 更具体地说,我不确定我是否可以使用 v-bind:match='match'在与循环相同的元素上 v-for='ma
所以我想知道为什么这个 v-if 和 v-else 语句不起作用,为什么我要以不同的方式解决它。 代码如下 Required: Select a Workflow {{ isChain ?
我有一个 VueJS 组件 ,我在同一个模板中使用了两次来显示两组不同的数据。每个都显示在自己的 使用 v-if 切换的容器在导航选项卡上。 似乎这些组件被实例化为同一个实例。我调用 console
我是一名优秀的程序员,十分优秀!