问题描述
这是布局代码-
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DealActivity">
<EditText
android:id="@+id/txtTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/text_margin_standard"
android:layout_marginTop="@dimen/text_margin_large"
android:layout_marginEnd="@dimen/text_margin_standard"
android:hint="@string/title_hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/txtPrice"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/text_margin_standard"
android:layout_marginTop="@dimen/text_margin_standard"
android:layout_marginEnd="@dimen/text_margin_standard"
android:inputType="numberDecimal"
android:hint="@string/price_hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtTitle" />
<EditText
android:id="@+id/txtDescription"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/text_margin_standard"
android:layout_marginTop="@dimen/text_margin_standard"
android:layout_marginEnd="@dimen/text_margin_standard"
android:hint="@string/description_hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtPrice" />
<Button
android:id="@+id/btnImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/text_margin_standard"
android:layout_marginTop="@dimen/text_margin_standard"
android:layout_marginEnd="@dimen/text_margin_standard"
android:text="@string/upload_image"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtDescription" />
<ImageView
android:id="@+id/image"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/text_margin_standard"
android:layout_marginTop="@dimen/text_margin_standard"
android:layout_marginEnd="@dimen/text_margin_standard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnImage"
app:srcCompat="@android:color/transparent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是Java代码-
package com.example.travelmantics;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
public class DealActivity extends AppCompatActivity {
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mDatabaseReference;
private static final int PICTURE_RESULT = 42; //the answer to everything
EditText txtTitle;
EditText txtDescription;
EditText txtPrice;
ImageView imageView;
TravelDeal deal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deal);
mFirebaseDatabase = FirebaseUtil.mFirebaseDatabase;
mDatabaseReference = FirebaseUtil.mDatabaseReference;
txtTitle = (EditText) findViewById(R.id.txtTitle);
txtDescription = (EditText) findViewById(R.id.txtDescription);
txtPrice = (EditText) findViewById(R.id.txtPrice);
imageView = (ImageView) findViewById(R.id.image);
Intent intent = getIntent();
TravelDeal deal = (TravelDeal) intent.getSerializableExtra("Deal");
if (deal==null) {
deal = new TravelDeal();
}
this.deal = deal;
txtTitle.setText(deal.getTitle());
txtDescription.setText(deal.getDescription());
txtPrice.setText(deal.getPrice());
showImage(deal.getimageUrl());
Button btnImage = findViewById(R.id.btnImage);
btnImage.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY,true);
startActivityForResult(intent.createChooser(intent,"Insert Picture"),PICTURE_RESULT);
}
});
}
@Override
public boolean onoptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.save_menu:
saveDeal();
Toast.makeText(this,"Deal saved",Toast.LENGTH_LONG).show();
clean();
backToList();
return true;
case R.id.delete_menu:
deleteDeal();
Toast.makeText(this,"Deal Deleted",Toast.LENGTH_LONG).show();
backToList();
return true;
default:
return super.onoptionsItemSelected(item);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.save_menu,menu);
if (FirebaseUtil.isAdmin) {
menu.findItem(R.id.delete_menu).setVisible(true);
menu.findItem(R.id.save_menu).setVisible(true);
enableEditTexts(true);
}
else {
menu.findItem(R.id.delete_menu).setVisible(false);
menu.findItem(R.id.save_menu).setVisible(false);
enableEditTexts(false);
}
return true;
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == PICTURE_RESULT && resultCode == RESULT_OK) {
Uri imageUri = data.getData();
final StorageReference ref = FirebaseUtil.mStorageRef.child(imageUri.getLastPathSegment());
ref.putFile(imageUri).addOnSuccessListener(this,new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
String url = ref.getDownloadUrl().toString();
//String url = taskSnapshot.getDownloadUrl().toString();
String pictureName = taskSnapshot.getStorage().getPath();
deal.setimageUrl(url);
deal.setimageName(pictureName);
Log.d("Url: ",url);
Log.d("Name",pictureName);
showImage(url);
}
});
}
}
private void saveDeal() {
deal.setTitle(txtTitle.getText().toString());
deal.setDescription(txtDescription.getText().toString());
deal.setPrice(txtPrice.getText().toString());
if(deal.getId()==null) {
mDatabaseReference.push().setValue(deal);
}
else {
mDatabaseReference.child(deal.getId()).setValue(deal);
}
}
private void deleteDeal() {
if (deal == null) {
Toast.makeText(this,"Please save the deal before deleting",Toast.LENGTH_SHORT).show();
return;
}
mDatabaseReference.child(deal.getId()).removeValue();
Log.d("image name",deal.getimageName());
if(deal.getimageName() != null && deal.getimageName().isEmpty() == false) {
StorageReference picRef = FirebaseUtil.mStorage.getReference().child(deal.getimageName());
picRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("Delete Image","Image Successfully Deleted");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("Delete Image",e.getMessage());
}
});
}
}
private void backToList() {
Intent intent = new Intent(this,ListActivity.class);
startActivity(intent);
}
private void clean() {
txtTitle.setText("");
txtPrice.setText("");
txtDescription.setText("");
txtTitle.requestFocus();
}
private void enableEditTexts(boolean isEnabled) {
txtTitle.setEnabled(isEnabled);
txtDescription.setEnabled(isEnabled);
txtPrice.setEnabled(isEnabled);
}
private void showImage(String url) {
if (url != null && url.isEmpty() == false) {
int width = Resources.getSystem().getdisplayMetrics().widthPixels;
Picasso.get()
.load(url)
.resize(width,width*2/3)
.centerCrop()
.into(imageView);
}
}
}
在活动中,即使上传图片后,上传的图片也不会显示在 imageview 中,但 imageUrl 已添加到 firebase。此外,当再次打开保存的交易时,不会显示图像。默认图像颜色为透明,但不会使用 firebase 的图像 url 设置图像视图。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)