Изображение Пикассо, загруженное с Firebase URL, через некоторое время не работает.Работает нормально при отправке - PullRequest
2 голосов
/ 03 апреля 2019

Я использую представление изображений для загрузки сообщений изображений с URL-адреса, хранящегося в базе данных и хранилище Firebase. однако, когда я впервые отправляю сообщение с изображением, изображение некоторое время загружается в просмотр изображений, а затем исчезает через некоторое время. Я знаю URL и код работает. Если бы он не работал, изображение никогда бы не загрузилось. Но это исчезает. Мне нужна помощь

MessageAdapter.java

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.findViewById(R.id.image_message);
            messageText.setText(model.getMessageText());
            String url = model.getMessageImg();
           String url2 = "\""+url+"\"";
           // messageText.setText(url);



        if(model.getMessageType()== "image") {
            messagaImage.setVisibility(View.VISIBLE);
            messageText.setVisibility(View.GONE);
            Picasso.get().load(model.getMessageImg()).into(messagaImage);


        }

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

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 Uri mImageUri;
    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();
        mRootRef = FirebaseDatabase.getInstance().getReference();
        final EditText input = (EditText) findViewById(R.id.input1);
        showAllOldMessages();
        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(),"","text",

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

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

                                            FirebaseAuth.getInstance().getCurrentUser().getUid()
                                    )
                            );
                    input.setText("");
                   //send notification
                }
            }
        });
        imagebutton.setOnClickListener(new View.OnClickListener() {
            //Intent data;
            @Override

            public void onClick(View view) {
                TextView message_text;
                 message_text = (TextView) findViewById(R.id.message_text);
                Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICK);
            }
        });
    }
   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode,data);


        final EditText input = (EditText) findViewById(R.id.input1);

        if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){
            Uri imageUri = data.getData();

       final String push_id = UUID.randomUUID().toString();
       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();
                   FirebaseDatabase.getInstance()
                          .getReference()
                           .push()
                           .setValue(
                   new ChatMessage(input.getText().toString(),download_url,"image",

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

                           StudentChatActivity.this.tutorName,
                           StudentChatActivity.this.tutorID,
FirebaseAuth.getInstance().getCurrentUser().getUid()));
 input.setText("");
 }
       }
           public void onComplete(DatabaseError databaseError, DatabaseReference 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());
        }
    }
}

StudentsChatListsActivity.java

public class StudentChatsListActivity extends AppCompatActivity {
    private FirebaseListAdapter<ChatMessage> adapter;
    private ListView listView;
    public static String tutorID;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_chats_list);
        listView = (ListView) findViewById(R.id.list);
        showAllOldMessages();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                tutorID = StudentChatsListMessageAdapter.tutorsIdsList.get(position);
                String tutorName = StudentChatsListMessageAdapter.tutorsNamesList.get(position);
                Intent selectedStudent = new Intent(StudentChatsListActivity.this, StudentChatActivity.class);
                selectedStudent.putExtra("tutorName", tutorName);
                selectedStudent.putExtra("tutorID", tutorID);
                StudentChatsListActivity.this.startActivity(selectedStudent);
                finish();
            }
        });
    }
    private void showAllOldMessages() {
        adapter = new StudentChatsListMessageAdapter(
                this,
                ChatMessage.class,
                R.layout.simplerow,
                FirebaseDatabase.getInstance().getReference()
        );
        listView.setAdapter(adapter);
    }
}

StudentChatListsMessageAdapter.java

public class StudentChatsListMessageAdapter extends FirebaseListAdapter<ChatMessage> {

    private StudentChatsListActivity activity;
    public static ArrayList<String> tutorsIdsList;
    public static ArrayList<String> tutorsNamesList;


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

        tutorsIdsList = new ArrayList<String>();
        tutorsNamesList = new ArrayList<String>();

    }

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

        if (v != null) {
            TextView messageText = (TextView) v.findViewById(R.id.rowTextView);
            messageText.setText(model.getTutorName());
        }
    }

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

        if (chatMessage.getStudentID() != null && chatMessage.getTutorID() != null && !tutorsIdsList.contains(chatMessage.getTutorID()) && chatMessage.getStudentID().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {

            view = activity.getLayoutInflater().inflate(R.layout.simplerow, viewGroup, false);
            populateView(view, chatMessage, position);

            tutorsNamesList.add(chatMessage.getTutorName());
            tutorsIdsList.add(chatMessage.getTutorID());
            return view;

        }

        view = activity.getLayoutInflater().inflate(R.layout.item_empty, viewGroup, false);
        tutorsNamesList.add("");
        tutorsIdsList.add("");
        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;
    }
}
...