簡體   English   中英

我在應用程序中發送圖像消息時遇到困難並遇到錯誤。 短信工作正常

[英]I have difficulty and run into errors while sending images messages in my app. Text messages work fine

在應用程序的聊天功能中,我能夠發送和接收短信。 我正在嘗試實現能夠發送和接收圖像消息的位置,並且遇到了錯誤。

StudentChatActivity.java

public class StudentChatActivity extends AppCompatActivity {
    private FirebaseListAdapter<ChatMessage> adapter;

    private ListView listView;
    public static String tutorID = "";
    public String tutorName = "";
    private String mChatUser;
    private FirebaseAuth mAuth;
    private DatabaseReference mRootRef;
    FirebaseDatabase database;
    private MessageAdapter mAdapter;
    private static final int TOTAL_ITEMS_TO_LOAD = 10;
    private int mCurrentPage = 1;
    private static final int GALLERY_PICK = 1;
    private FirebaseUser mCurrentUser;
    private StorageReference mImageStorage;

    private int itemPos = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        Intent intt = getIntent();
        Bundle b = intt.getExtras();

        if (b != null) {
            tutorID = (String) b.get("tutorID");
            tutorName = (String) b.get("tutorName");

        }
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        listView = (ListView) findViewById(R.id.list);
        ImageButton imagebutton = (ImageButton) findViewById(R.id.image_button);
        mImageStorage = FirebaseStorage.getInstance().getReference();
        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid();
        final EditText input = (EditText) findViewById(R.id.input1);

       mRootRef.child("Chat").child(String.valueOf(mCurrentUser)).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if(!dataSnapshot.hasChild(mChatUser)){
                    Map chatAddMap = new HashMap();
                    chatAddMap.put("seen",false);
                    chatAddMap.put("timestamp", ServerValue.TIMESTAMP);

                    Map chatUserMap = new HashMap();
                    chatUserMap.put("Chat/" + mCurrentUser + "/" + mChatUser, chatAddMap);
                    chatUserMap.put("Chat/" + mChatUser + "/" + mCurrentUser, chatAddMap);

                    mRootRef.updateChildren(chatUserMap, new DatabaseReference.CompletionListener() {
                        @Override
                        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                            if (databaseError != null)
                                Log.d( "Chat_log: ",  databaseError.getMessage().toString());
                        }
                    });
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        showAllOldMessages();

        imagebutton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(galleryIntent,"SELECT IMAGE"),GALLERY_PICK);
            }
        });

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (input.getText().toString().trim().equals("")) {
                    Toast.makeText(StudentChatActivity.this, "Please enter some texts!", Toast.LENGTH_SHORT).show();
                } else {
                    FirebaseDatabase.getInstance()
                            .getReference()
                            .push()
                            .setValue(

                                    new ChatMessage(input.getText().toString(),

                                            StudentHome.info.etFirstname,
                                            FirebaseAuth.getInstance().getCurrentUser().getUid(),

                                            StudentChatActivity.this.tutorName,
                                            StudentChatActivity.this.tutorID,

                                            FirebaseAuth.getInstance().getCurrentUser().getUid()
                                    )
                            );

                    input.setText("");


                    //send notification
                }
            }
        });

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);

        mRootRef = database.getReference();
       // mAuth = FirebaseAuth.getInstance();
        final EditText input = (EditText) findViewById(R.id.input1);

        if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){
            Uri imageUri = data.getData();
            final String current_user_ref = "messages/" + mCurrentUser + "/" + mChatUser;
            final String chat_user_ref = "messages/" + mChatUser + "/" + mCurrentUser;
            DatabaseReference user_message_push = mRootRef.child("messages").child(String.valueOf(mCurrentUser)).child(mChatUser).push();
       final String push_id = user_message_push.getKey();
       StorageReference filepath = mImageStorage.child("message_images").child(push_id + ".jpg");

       filepath.putFile(imageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {


           @Override
           public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
               if(task.isSuccessful()){
                   String download_url = task.getResult().getDownloadUrl().toString();
                   Map messageMap = new HashMap();
                   messageMap.put("message",download_url);
                   messageMap.put("seen",false);
                   messageMap.put("type","image");
                   messageMap.put("time", ServerValue.TIMESTAMP);
                   messageMap.put("from",mCurrentUser);

                   Map messageUserMap = new HashMap();
                   messageUserMap.put(current_user_ref + "/" + push_id,messageMap);
                   messageUserMap.put(chat_user_ref + "/" + push_id,messageMap);

                   input.setText("");
                   mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
                       @Override
                       public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                           if (databaseError != null)
                               Log.d( "Chat_log: ",  databaseError.getMessage().toString());
                       }
                   });

                 /* mRootRef.updateChildren(messageUserMap, databaseError, databaseReference){

                       if (databaseError != null){
                        Log.d("CHAT_LOG", databaseError.getMessage().toString());
                       }
                   }); */
           }
       }
        });
    }
    }
    private void showAllOldMessages() {
        try {
            adapter = new MessageAdapter(this, ChatMessage.class, R.layout.item_in_message,
                    FirebaseDatabase.getInstance().getReference());
            listView.setAdapter(adapter);
        } catch (Exception er) {
            System.out.print(er.getMessage());
          }
    }
}

ChatMessage.Java

package com.rough.tuber.tuber;

import android.media.Image;

import java.util.Date;

public class ChatMessage {

    private String messageText;
    private String studentName;
    private String studentID;

    private String tutorName;
    private String tutorID;
    private String senderId;

    private long messageTime;

    public ChatMessage(String messageText, String studentName, String studentID, String tutorName, String tutorID, String senderId) {
        this.messageText = messageText;

        this.studentName = studentName;
        this.studentID = studentID;


        messageTime = new Date().getTime();

        this.tutorID = tutorID;
        this.tutorName = tutorName;

        this.senderId = senderId;

    }

    public ChatMessage() {

    }

    public String getStudentID() {
        return studentID;
    }

    public void setStudentID(String studentID) {

        this.studentID = studentID;
    }


    public String getSenderId() {
        return senderId;
    }

    public String getTutorID() {
        return tutorID;
    }

    public void setSenderId(String senderId) {
        this.senderId = senderId;
    }

    public void setTutorID(String tutorID) {
        this.tutorID = tutorID;
    }

    public String getTutorName() {
        return tutorName;
    }

    public void setTutorName(String tutorName) {
        this.tutorName = tutorName;
    }


    public String getMessageText() {
        return messageText;
    }

    public void setMessageText(String messageText) {
        this.messageText = messageText;
    }



    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public long getMessageTime() {
        return messageTime;
    }

    public void setMessageTime(long messageTime) {
        this.messageTime = messageTime;
    }
}

MessageAdapter.Java

package com.rough.tuber.tuber;

import android.text.format.DateFormat;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseListAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;

public class MessageAdapter extends FirebaseListAdapter<ChatMessage> {

    private StudentChatActivity activity;

    public MessageAdapter(StudentChatActivity activity, Class<ChatMessage> modelClass, int modelLayout, DatabaseReference ref) {
        super(activity, modelClass, modelLayout, ref);
        this.activity = activity;
    }

    @Override
    protected void populateView(View v, ChatMessage model, int position) {

        if (v != null) {
            TextView messageText = (TextView) v.findViewById(R.id.message_text);
            TextView messageUser = (TextView) v.findViewById(R.id.message_user);
            TextView messageTime = (TextView) v.findViewById(R.id.message_time);
           // ImageView messagaImage = (ImageView) v.fin
            messageText.setText(model.getMessageText());

            if (model.getSenderId() != null && model.getSenderId().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {
                messageUser.setText("You");

            } else {
                messageUser.setText(model.getTutorName());

            }
            // Format the date before showing it
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime()));
        }
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        ChatMessage chatMessage = getItem(position);


        if (chatMessage.getTutorID() != null && chatMessage.getStudentID() != null && chatMessage.getSenderId() != null && chatMessage.getStudentID().equals(FirebaseAuth.getInstance().getCurrentUser().getUid()) && chatMessage.getTutorID().equals(StudentChatActivity.tutorID)) {

            if (chatMessage.getSenderId() != null && chatMessage.getSenderId().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())


                    )
                view = activity.getLayoutInflater().inflate(R.layout.item_out_message, viewGroup, false);
            else
                view = activity.getLayoutInflater().inflate(R.layout.item_in_message, viewGroup, false);

            //generating view
            populateView(view, chatMessage, position);

            return view;
        }

        view = activity.getLayoutInflater().inflate(R.layout.item_empty, viewGroup, false);

        return view;

    }

    @Override
    public int getViewTypeCount() {
        // return the total number of view types. this value should never change
        // at runtime
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        // return a value between 0 and (getViewTypeCount - 1)
        return position % 2;
    }
}

我收到此錯誤。

這是錯誤消息。 致命異常:主進程:com.rough.tuber.tuber,PID:3931 java.lang.NullPointerException:嘗試在java.util上的空對象引用上調用接口方法'int java.lang.CharSequence.length()'。 reg.Matcher.reset(Matcher.java:1052)(位於java.util.regex.Matcher。(Matcher.java:180)位於java.util.regex.Pattern.matcher(Pattern.java:1006)來自com.google。 android.gms.internal.zzelv.zzqh(未知來源:2)位於com.google.firebase.database.DataSnapshot.hasChild(未知來源:12)位於com.rough.tuber.tuber.StudentChatActivity $ 1.onDataChange(StudentChatActivity.java :92),位於com.google.android.gms.internal.zzegf.zza(未知來源:13),位於com.google.android.gms.internal.zzeia.zzbyc(未知來源:2),位於com.google.android。 gms.internal.zzeig.run(未知來源:71),位於android.os.Handler.handleCallback(Handler.java:790),位於android.os.Handler.dispatchMessage(Handler.java:99),位於android.os.Looper。 java.lang.reflec上的android.app.ActivityThread.main(ActivityThread.java:6494)的循環(Looper.java:164) t.Method.invoke(本機方法)(位於com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:438)位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Firebase 在此處 輸入圖像描述在 此處 輸入圖像描述

在您的onCreate()方法上,您正在mRootRef上調用valueEventListener,盡管尚未初始化它。 另外,根據您的數據庫結構,數據庫路徑也應來自“ current_uid”。

無需在onActivityResult上初始化mRootRef,而是在onCreateMethod()上對其進行初始化:

.......
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);
    ........
    mRootRef = FirebaseDatabase.getInstance().getReference();
    .......
    mRootRef.child("Chat").child(current_uid)
    .addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        .........

更新

已針對您的持續錯誤更新。

從您的錯誤日志中清除它。

com.google.firebase.database.DatabaseException:無效的Firebase數據庫路徑:com.google.firebase.auth.internal.zzh@329c22b。 Firebase數據庫路徑中不得包含“。”,“#”,“ $”,“ [”或“]”

您的數據庫路徑中包含一些非預期的字符 您需要避免這種情況。

因此,打印數據庫路徑,並確保沒有任何'.', '#', '$', '[', or ']'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM