лучший способ загрузить изображения в Android

Я сохранил изображения как тип «изображение» (байты) в Sql Server
теперь я бы выздоровел это в моем приложении Android
Я пытаюсь отправить его как байт 64 на Android, но у меня была проблема с нехваткой памяти
Я нашел какое-то решение, как отправить ссылку изображения с php и загрузить его в Android, но я не знаю, как получить URL изображения (байт) и отправить его?

Адаптер RecyclerView:

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.MyTag>{
LayoutInflater inflater;
DbConnection db ;
CnxExternal myConex = new CnxExternal();
ArrayList<Map<String, String>> listitem;
private CardAdapter.MyTag holder;
Context ctx;
ArrayList<byte[]> img , imgfou ;
ArrayList<String>nomesFo,descriptions;
String codeBar;
ArrayList<Integer>idfourns;public CardAdapter(Context context, ArrayList<Map<String, String>> list,ArrayList<byte[]>imagbyt,ArrayList<String>names,ArrayList<Integer>idf,String cod,ArrayList<String>Description,ArrayList<byte[]>imagfour) {
super();
this.inflater = LayoutInflater.from(context);
this.listitem = list;
ctx=context;
this.img=imagbyt;
this.nomesFo=names;
this.idfourns=idf;
this.codeBar=cod;
this.imgfou=imagfour;
this.descriptions=Description;
db =new DbConnection(ctx);

}

public class MyTag extends RecyclerView.ViewHolder {
TextView price;
TextView name;
ImageView img;
TextView namfou;
TextView rating;
FloatingActionButton btnlike;

CardView cardView;
public MyTag(View view) {
super(view);
//for animat
cardView=(CardView)view.findViewById(R.id.card_view);

price = (TextView) view.findViewById(R.id.prixprodtestcard);
name = (TextView) view.findViewById(R.id.nomprodtestcard);
namfou=(TextView) view.findViewById(R.id.qtestockcard);
rating=(TextView)view.findViewById(R.id.rating);
img = (ImageView) view.findViewById(R.id.imageprodcard);
btnlike = (FloatingActionButton) view.findViewById(R.id.likeButtoncard);
}
}@Override
public MyTag onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, null);

return new MyTag(v);
}@Override
public int getItemCount() {
return listitem.size();
}@Override
public void onViewRecycled(MyTag holder) {
super.onViewRecycled(holder);
Glide.clear(holder.img);
}

public void onBindViewHolder(final MyTag holder, final int position) {

//anim fadein
YoYo.with(Techniques.SlideInUp)
.playOn(holder.cardView);

final HashMap<String, String> map = (HashMap<String, String>)listitem.get(position);if(map.get("like").equals("0")){
holder.btnlike.setImageResource(R.drawable.heart);
}else{
holder.btnlike.setImageResource(R.drawable.ic_liked);

}
holder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ctx,InformationsProduit.class);
i.putExtra("nomProd",map.get("name"));
i.putExtra("prix",map.get("price"));
i.putExtra("nomFour",nomesFo.get(position));
i.putExtra("image",img.get(position));
i.putExtra("telFour",map.get("telefournisseur"));
i.putExtra("addrFour",map.get("adressFou"));
i.putExtra("idFour",idfourns.get(position));
i.putExtra("description",descriptions.get(position));
i.putExtra("codeBar",codeBar);
ctx.startActivity(i);
}
});

holder.price.setText(map.get("price"));
holder.name.setText(map.get("name"));
holder.namfou.setText(nomesFo.get(position));
holder.rating.setText(map.get("rating"));Glide.with(ctx)
.load(imgfou.get(position))
//.diskCacheStrategy( DiskCacheStrategy.NONE )
//.skipMemoryCache( true )
.thumbnail(0.1f)
.into(holder.img);holder.btnlike.setOnClickListener(new View.OnClickListener() {
CardAdapter.MyTag hld=holder;
int pos=position;
@Override
public void onClick(View arg0) {

HashMap<String, String> mapclicked = (HashMap<String, String>)listitem.get(pos);
if(mapclicked.get("like").equals("0"))
{
hld.btnlike.setImageResource(R.drawable.ic_liked);
mapclicked.put("like", "1");Snackbar snackbar;
snackbar = Snackbar.make(hld.btnlike, "Bien ajouter au prefere", Snackbar.LENGTH_SHORT);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(Color.GREEN);
TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
snackbar.show();

db.insertFav(codeBar,idfourns.get(pos) , map.get("name") , map.get("price") , nomesFo.get(position) , map.get("adressFou") , map.get("telefournisseur") ,img.get(position) );

hld.btnlike.startAnimation(animAdp());

}else{
hld.btnlike.setImageResource(R.drawable.heart);
mapclicked.put("like", "0");

Snackbar.make(hld.btnlike, "Removed from prefere" , Snackbar.LENGTH_LONG).setAction("Action", null).show();

db.deleteR(codeBar,idfourns.get(pos));
hld.btnlike.startAnimation(animAdp());
}
}}
);}`

PHP функция:

$res=sqlsrv_next_result($stmt);
while($res){

while($data=sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
array_push($information,array(
...
"image"=>base64_encode($data['image']),

"imgfour"=>base64_encode($data['imagefournisseur']),
));

}
$res=sqlsrv_next_result($stmt);
}
echo json_encode(array('produits'=>$information));

}

****************** Проблема ***********************
проблема была из-за этого большого файла JSON и большого массива с изображениями. Не о переработчике с использованием двадцати изображений.
@greenapps

-2

Решение

Почему вы кодируете байтовый массив в строку base64? Просто повторить байты. Вам не нужно создавать файл байтов на вашем сервере, либо как
предлагается в двух ответах.

Сценарий php, который выводит байты, так же хорош, как и прямая ссылка на файл изображения на сервере.

0

Другие решения

Лучшим способом было бы хранить ваши изображения на сервере, доступ к которому можно получить публично, используя http как этот образ — https://pbs.twimg.com/profile_images/450103729383956480/Tiys3m4x.jpeg

Когда у вас есть путь, вы можете использовать библиотеки загрузки изображений, доступные для Android ( скольжение , Пикассо , фреска) эффективно загружать его в ваше приложение без исключения из памяти

0

Вы можете использовать просто ссылку, как это

https://pbs.twimg.com/profile_images/450103729383956480/Tiys3m4x.jpeg

сервер форм и шоу в Android, затем используйте библиотеки загрузки изображений «Пикассо»

0