Я использую представление изображений для загрузки сообщений изображений с 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;
}
}