Java 为什么我在尝试将包从活动传递到片段时总是得到null?
我正试图将一个值从我的活动传递到我的片段,但我一直收到以下错误:“尝试在空对象引用上调用虚拟方法‘java.lang.String android.os.Bundle.getString(java.lang.String)’”。我不知道为什么,如果您能提供一些帮助,我将不胜感激 片段类Java 为什么我在尝试将包从活动传递到片段时总是得到null?,java,android,Java,Android,我正试图将一个值从我的活动传递到我的片段,但我一直收到以下错误:“尝试在空对象引用上调用虚拟方法‘java.lang.String android.os.Bundle.getString(java.lang.String)’”。我不知道为什么,如果您能提供一些帮助,我将不胜感激 片段类 public class MessageFragment extends Fragment { private RecyclerView displayMessagesRecycleView; p
public class MessageFragment extends Fragment {
private RecyclerView displayMessagesRecycleView;
private View displayChatListView;
private RecyclerView.LayoutManager layoutManager;
private ChatListAdapter chatListAdapter;
private ArrayList<String> messageList;
private Message message;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
displayChatListView = inflater.inflate(R.layout.display_messages_layout, container, false);
createObjects();
initRecycleView();
populateRecycleView();
return displayChatListView;
}
//set up RecycleVIew/listener to detect taps
public void initRecycleView() {
displayMessagesRecycleView = displayChatListView.findViewById(R.id.chatListRecycleView);
layoutManager = new LinearLayoutManager(getContext());
((LinearLayoutManager) layoutManager).setStackFromEnd(true);
((LinearLayoutManager) layoutManager).setReverseLayout(true);
displayMessagesRecycleView.setLayoutManager(layoutManager);
chatListAdapter = new ChatListAdapter(getActivity(), messageList);
displayMessagesRecycleView.setAdapter(chatListAdapter);
displayMessagesRecycleView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, final int position) {
TextView textView = view.findViewById(R.id.textViewOptions);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("position", "item clicked");
}
});
}
})
);
}
@Override
public void onStart() {
super.onStart();
retreiveBundle();
}
//Instantiate objects
public void createObjects() {
messageList = new ArrayList<>();
}
public void populateRecycleView() {
messageList.add("HEy");
chatListAdapter.notifyDataSetChanged();
}
//retrieves selected user's name and profile pic from message activity and updates profile image and name
public void retreiveBundle() {
String data = getArguments().getString("data");// data whi
}
}
public类MessageFragment扩展了片段{
私有回收视图显示消息回收视图;
私有视图显示聊天列表视图;
private RecyclerView.LayoutManager LayoutManager;
私有ChatListAdapter ChatListAdapter;
私有ArrayList消息列表;
私人信息;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
displayChatListView=充气机。充气(R.layout.display\u messages\u布局,容器,false);
createObjects();
initRecycleView();
populateRecycleView();
返回displayChatListView;
}
//设置RecycleVIew/listener以检测抽头
公共void initRecycleView(){
displayMessagesRecycleView=displayChatListView.findViewById(R.id.chatListRecycleView);
layoutManager=新的LinearLayoutManager(getContext());
((LinearLayoutManager)layoutManager)。setStackFromEnd(true);
((LinearLayoutManager)layoutManager)。设置ReverseLayout(true);
displayMessagesRecycleView.setLayoutManager(layoutManager);
chatListAdapter=新的chatListAdapter(getActivity(),messageList);
displayMessagesRecycleView.setAdapter(chatListAdapter);
displayMessagesRecycleView.addOnItemTouchListener(新的RecyclerItemClickListener(getContext(),新的RecyclerItemClickListener.OnItemClickListener()){
@凌驾
public void onItemClick(视图,最终整型位置){
TextView TextView=view.findViewById(R.id.textViewOptions);
textView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.i(“位置”、“点击项目”);
}
});
}
})
);
}
@凌驾
public void onStart(){
super.onStart();
retreiveBundle();
}
//实例化对象
public void createObjects(){
messageList=newarraylist();
}
public void populateRecycleView(){
messageList.add(“嘿”);
notifyDataSetChanged();
}
//从消息活动中检索所选用户名和配置文件pic,并更新配置文件图像和名称
public void retreiveBundle(){
字符串数据=getArguments().getString(“数据”);//数据whi
}
}
信息活动
public class MessageActivity extends AppCompatActivity {
private RecyclerView messagesRecycleView;
private String userProfileName;
private String userProfilePic;
private String timeStamp;
private String messageTimeStamp;
private HashMap<String, Object> messageDictionary;
private FirebaseUser currentFirebaseUser;
private TextView userNameTextView;
private CircleImageView userProfilePicture;
private EditText messageInputEditText;
private DatabaseReference firebaseDatabase;
private DatabaseReference messesagesRef;
private DatabaseReference RootRef;
private String id;
private String messageSender, messageReceiver;
private Message messages;
private ArrayList<Message> messageList;
private MessageAdapter messageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
messageList = new ArrayList<>();
initRecycleView();
linkUpViews();
createObjects();
setUpFirebase();
retreiveBundle();
messageSender = currentFirebaseUser.getUid();
messageReceiver = id;
}
@Override
protected void onStart() {
super.onStart();
messageList.clear();
RootRef.child("Messages").child(messageSender).child(messageReceiver).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Message messages = dataSnapshot.getValue(Message.class);
messageList.add(messages);
messageAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
//find views by id
public void linkUpViews() {
userNameTextView = findViewById(R.id.userNameTv);
userProfilePicture = findViewById(R.id.chatProfilePic);
messageInputEditText = findViewById(R.id.chatboxEditText);
}
//set up RecycleView
public void initRecycleView() {
messagesRecycleView = findViewById(R.id.messagesRecycleView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setStackFromEnd(true);
linearLayoutManager.setReverseLayout(true);
messagesRecycleView.setLayoutManager(linearLayoutManager);
messageAdapter = new MessageAdapter(MessageActivity.this, messageList);
messagesRecycleView.setAdapter(messageAdapter);
}
//create objects
public void createObjects() {
messageDictionary = new HashMap<>();
//messageList = new ArrayList<>();
}
public void sendMessageButton(View view) {
sendMessages();
//saveMessages();
}
//retrieves selected user's name and profile pic from NewsFeedFragment and updates profile image and name
public void retreiveBundle() {
Bundle bundle = getIntent().getExtras();
userProfileName = bundle.getString("profileName");
userProfilePic = bundle.getString("profilePic");
timeStamp = bundle.getString("timestamp");
id = bundle.getString("id");
Log.i("timestamp", timeStamp);
userNameTextView.setText(userProfileName);
Picasso.get().load(userProfilePic).into(userProfilePicture);
}
//goes back to previous activity
public void backToShop(View view) {
Intent intent = new Intent(MessageActivity.this, MainActivity.class);
startActivity(intent);
}
//Set up Firebase connection
public void setUpFirebase() {
messesagesRef = FirebaseDatabase.getInstance().getReference();
RootRef = FirebaseDatabase.getInstance().getReference();
firebaseDatabase = FirebaseDatabase.getInstance().getReference();
currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
}
//Store messages to Firebase
public void sendMessages() {
if (TextUtils.isEmpty(messageInputEditText.getText().toString())) {
Toast.makeText(this, "Please enter a message", Toast.LENGTH_SHORT).show();
} else {
String messageSenderRef = "Messages/" + messageSender + "/" + messageReceiver;
String messageReceiverRef = "Messages/" + messageReceiver + "/" + messageSender;
DatabaseReference userMessageKeyRef = RootRef.child("Messages")
.child(messageSender).child(messageReceiver).push();
String messagePushKey = userMessageKeyRef.getKey();
messageDictionary.put("message", messageInputEditText.getText().toString());
messageDictionary.put("sender", messageSender);
messageDictionary.put("receiver", messageReceiver);
HashMap<String, Object> messageBodyDetails = new HashMap<>();
messageBodyDetails.put(messageSenderRef + "/" + messagePushKey, messageDictionary);
messageBodyDetails.put(messageReceiverRef + "/" + messagePushKey, messageDictionary);
RootRef.updateChildren(messageBodyDetails).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
messageInputEditText.setText("");
Toast.makeText(MessageActivity.this, "Sent message...", Toast.LENGTH_SHORT).show();
sendDataToFrag();
} else {
Log.e("Error", task.getException().getMessage().toString());
}
}
});
}
}
//sends data to message fragment...
public void sendDataToFrag(){
Bundle bundle = new Bundle();
bundle.putString("data", "From Activity");
// set Fragmentclass Arguments
MessageFragment fragobj = new MessageFragment();
fragobj.setArguments(bundle);
}
}
公共类MessageActivity扩展了AppCompatActivity{
私有回收视图消息回收视图;
私有字符串userProfileName;
私有字符串userProfilePic;
私有字符串时间戳;
私有字符串消息时间戳;
私有HashMap消息字典;
私有FirebaseUser currentFirebaseUser;
私有文本视图用户名文本视图;
私有CircleImageView用户档案图片;
私有编辑文本消息输入文本;
私有数据库参考firebaseDatabase;
私人数据库参考信息;
私有数据库引用RootRef;
私有字符串id;
私有字符串messageSender、messageReceiver;
私人信息;
私有ArrayList消息列表;
私有消息适配器消息适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_消息);
messageList=newarraylist();
initRecycleView();
链接视图();
createObjects();
setUpFirebase();
retreiveBundle();
messageSender=currentFirebaseUser.getUid();
messageReceiver=id;
}
@凌驾
受保护的void onStart(){
super.onStart();
messageList.clear();
RootRef.child(“Messages”).child(messageSender).child(messageReceiver).addChildEventListener(new ChildEventListener()){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
messages=dataSnapshot.getValue(Message.class);
messageList.add(消息);
messageAdapter.notifyDataSetChanged();
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
//按id查找视图
公共无效链接视图(){
userNameTextView=findviewbyd(R.id.userNameTv);
userProfilePicture=findviewbyd(R.id.chatProfilePic);
MessageInputItemText=findViewById(R.id.chatboxEditText);
}
//设置RecycleView
公共void initRecycleView(){
messagesRecycleView=findViewById(R.id.messagesRecycleView);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(此);
linearLayoutManager.setStackFromEnd(true);
linearLayoutManager.setReverseLayout(true);
messagesRecycleView.setLayoutManager(linearLayoutManager);
messageAdapter=newmessageadapter(MessageActivity.this,messageList);
messagesRecycleView.setAdapter(messageAdapter);
}
//创建对象
public void createObjects(){
M
public class MyFragment extends Fragment {
public static MyFragment newInstance(String data) {
Bundle args = new Bundle();
args.putString("data", data);
MyFragment fragment = new MyFragment();
fragment.setArguments(args);
return fragment;
}
public String getData() {
return getArguments().getString("data");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String data = getData();
return inflater.inflate(R.layout.test, container, false);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uiView = findViewById(R.id.ui);
uiView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace(R.id.fragment, MyFragment.newInstance("My Test"));
transaction.commit();
}
}).start();
}
});
}
}