Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在尝试将包从活动传递到片段时总是得到null?_Java_Android - Fatal编程技术网

Java 为什么我在尝试将包从活动传递到片段时总是得到null?

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

我正试图将一个值从我的活动传递到我的片段,但我一直收到以下错误:“尝试在空对象引用上调用虚拟方法‘java.lang.String android.os.Bundle.getString(java.lang.String)’”。我不知道为什么,如果您能提供一些帮助,我将不胜感激

片段类

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();
                }
            });
        }

}