我有一个名为ObjetoAdapter的适配器,它有一个名为MyViewHolder的ViewHolder和ImageView“fotoObjeto”。在这个适配器中有一个内部类
storageReference = ConfiguracaoFirebase.getFirebaseStorage();
StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");
childRef.getDownloadUrl.addOnSuccessListener{
@Override
public void onSuccess(Uri uri) {
Log.i("OA7.1","objeto.getnome() uri: " + uri );
Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
}
事实是,我试图(通过所有方式)检索此addOnSuccessListener {...}之外的“uri”,但没有成功。此外,我使用SharedPreferences存储此值,如下所示:
storageReference = ConfiguracaoFirebase.getFirebaseStorage();
StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");
childRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.i("OA7.1","objeto.getnome() uri: " + uri );
Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext().getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("KEY",uri.toString());
}
});
if(sharedPreferences.contains("KEY")){
Uri uri = Uri.parse( sharedPreferences.getString("KEY",null) );
Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
}
但即便经过这些尝试,我也意识到sharedPreferences会保存一个明显错误的uri。换句话说,共享首选项可以保存uri,但与原始版本不同。没有其他共享密钥。 我需要帮助,我已经“清理”谷歌试图找到这个技巧的解决方案。 欢迎任何帮助。谢谢!
在这里,我将把所有片段代码:
package com.mypackage
import android.app.Fragment;
import android.content.ContentProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.StorageManager;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.DownloadListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.droidelivery.droidelivery.R;
import com.droidelivery.droidelivery.activity.LoginActivity;
import com.droidelivery.droidelivery.activity.MeuItemActivity;
import com.droidelivery.droidelivery.config.ConfiguracaoFirebase;
import com.droidelivery.droidelivery.helper.Base64Custom;
import com.droidelivery.droidelivery.helper.ImageProcess;
import com.droidelivery.droidelivery.model.Objeto;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Lucas on 16/09/2017.
*/
public class ObjetoAdapter extends ArrayAdapter<Objeto> {
private ArrayList<Objeto> objetos;
private Context context;
private FirebaseUser usuarioLogado;
private ImageView fotoObjeto;
DatabaseReference databaseReference;
private Button botaoExcluir;
private DatabaseReference dataBaseReference;
private DatabaseReference dataBaseReferenceGeral;
private StorageReference storageReference;
//private int i = 0;
private int itemAba;
private Bitmap bitmap;
private String bitmapString;
public ObjetoAdapter(@NonNull Context c, @NonNull ArrayList<Objeto> objects) {
super(c, 0, objects);
this.objetos = objects;
this.context = c;
}
class MyViewHolder{
ImageView fotoObjeto;
TextView nomeObjeto;
TextView emailObjeto;
Button botaoExcluir;
MyViewHolder(View v){
nomeObjeto = (TextView) v.findViewById(R.id.tv_nome);
emailObjeto = (TextView) v.findViewById(R.id.tv_email);
botaoExcluir = (Button) v.findViewById(R.id.botaoExcluirId);
fotoObjeto = (ImageView) v.findViewById(R.id.img_objeto_id);
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent){
//Log.i("DDD8(ObjetoAdapter)","getView CHAMADO!!! " );
Log.i("OA1","position(ObjetoAdapter): " + position );
View view = null;
View row = convertView;
MyViewHolder holder = null;
if( row == null ){
//inicializar objeto para montagem da view
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.lista_objeto, parent , false);
holder = new MyViewHolder(row);
row.setTag(holder);
}else{
holder = (MyViewHolder) row.getTag();
}
//Recebe qual foi a última aba da MainActivity
final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences( getContext() );
Log.i("OA2","getContext(): " + getContext() );
if( sharedPreferences.contains("CURRENT_ITEM") ){
itemAba = sharedPreferences.getInt("CURRENT_ITEM",0);
Log.i("OA3","itemAba:" + itemAba );
}
usuarioLogado = ConfiguracaoFirebase.getFirebaseAutenticacao().getCurrentUser();
dataBaseReference = ConfiguracaoFirebase.getFirebase().child("objetos").child( Base64Custom.codificarBase64( usuarioLogado.getEmail() ) );
dataBaseReferenceGeral = ConfiguracaoFirebase.getFirebase().child("geral");
storageReference = ConfiguracaoFirebase.getFirebaseStorage();
Log.i("OA4","storageReference: " + storageReference);
holder.fotoObjeto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext(),"PODE MOSTRAR UMA IMAGEM SOZINHA!", Toast.LENGTH_LONG ).show();
Log.i("OA5","getContext()" + getContext() );
Intent intent = new Intent(getContext(), MeuItemActivity.class);
intent.putExtra("POSICAO", position); //passar a posicao do clique na ListView para a MeuItemActivity.java
getContext().startActivity( intent );
}
});
holder.botaoExcluir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
objetos.remove(position);
notifyDataSetChanged();
dataBaseReference.addValueEventListener(new ValueEventListener() {
int i = 0;
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dados: dataSnapshot.getChildren() ){
final Objeto objeto = dados.getValue( Objeto.class );
Log.i("OA6","objeto.getNome():" + objeto.getNome() + "posicao: " + i);
if(i == position ){
Log.i("OA7","objeto.getNome():" + objeto.getNome() + "posicao: " + i + "EXCLUÍDO!");
dataBaseReference.child(dados.getKey()).removeValue();
dataBaseReferenceGeral.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dadosGeral: dataSnapshot.getChildren() ){
Objeto objetoGeral = dadosGeral.getValue( Objeto.class);
if( objetoGeral.getNome().equals( objeto.getNome() ) &&
objetoGeral.getDescricao().equals( objeto.getDescricao() ) &&
objetoGeral.getUrl().equals( objeto.getUrl() )
){
dataBaseReferenceGeral.child(dadosGeral.getKey()).removeValue();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
i++;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
final Objeto objeto = objetos.get( position );
holder.nomeObjeto.setText( objeto.getNome() );
holder.emailObjeto.setText( usuarioLogado.getEmail() );
//Glide.with(getContext().getApplicationContext()).load(objeto.getUrl()).override(100, 200).into(holder.fotoObjeto);
//Glide.with(getContext().getApplicationContext()).load(objeto.getUrl()).override(100, 200).into(holder.fotoObjeto);
//holder.fotoObjeto.setImageBitmap(ImageProcess.getBitmapFromURL(objeto.getUrl()));
//Glide.with(getContext().getApplicationContext()).load().override(100, 200).into(holder.fotoObjeto);
//final SharedPreferences.Editor editor = sharedPreferences.edit();
storageReference = ConfiguracaoFirebase.getFirebaseStorage();
StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");
childRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.i("OA7.1","objeto.getnome() uri: " + uri );
Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext().getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("KEY",uri.toString());
}
});
if(sharedPreferences.contains("KEY")){
Uri uri = Uri.parse( sharedPreferences.getString("KEY",null) );
Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
}
Log.i("OA8","objetos.size = " + objetos.size()); //numero de elementos da lista (confirmado!)
if(sharedPreferences.contains("link")){
String link = sharedPreferences.getString("link","");
Log.i("OA9","link(ObjetoAdapter) = " + link);
Log.i("OA10","objetos.get(position).getUrl(ObjetoAdapter) = " + objetos.get(position).getUrl());
Toast.makeText(context, "link: " + link, Toast.LENGTH_SHORT).show();
}
//final MyViewHolder finalHolder = holder;
return row;
}
//return view;
}