Php Android内存不足异常
我在使用byte[]类型将图像从数据库还原到android时遇到问题,我们将ArrayList图像传递到使用Glide的适配器,但我可以使用服务web PHP恢复20多个数据库图像,应用程序返回异常“内存不足!!” 我希望你能帮助我找到解决这个问题的办法。我尝试了很多,但我仍然有这个问题Php Android内存不足异常,php,android,sql-server,json,Php,Android,Sql Server,Json,我在使用byte[]类型将图像从数据库还原到android时遇到问题,我们将ArrayList图像传递到使用Glide的适配器,但我可以使用服务web PHP恢复20多个数据库图像,应用程序返回异常“内存不足!!” 我希望你能帮助我找到解决这个问题的办法。我尝试了很多,但我仍然有这个问题 public class CardAdapter extends RecyclerView.Adapter<CardAdapter.MyTag> { LayoutInflater inflater;
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());
}
}}
);
}
公共类CardAdapter扩展了RecyclerView.Adapter
{
充气机;
数据库连接数据库;
CnxExternal myConex=新的CnxExternal();
ArrayList列表项;
私人卡适配器.MyTag持有人;
上下文ctx;
ArrayList img,imgfou;
ArrayListnomesFo,描述;
字符串代码条;
Arraylistidforns;
公共CardAdapter(上下文上下文、ArrayList列表、ArrayListAgByt、ArrayListnames、ArrayListidf、字符串cod、ArrayListDescription、ArrayListAgFour){
超级();
this.inflater=layoutiner.from(上下文);
this.listitem=列表;
ctx=上下文;
this.img=imagbyt;
this.nomesFo=名称;
这个.idforns=idf;
这个.codeBar=cod;
this.imgfou=imagfour;
这个。描述=描述;
db=新的数据库连接(ctx);
}
公共类MyTag扩展了RecyclerView.ViewHolder{
文本视图价格;
文本视图名称;
图像视图img;
TextView namfou;
文本视图评级;
浮动操作按钮btnlike;
卡德维尤;
公共MyTag(视图){
超级(视图);
//动画
cardwiew=(cardwiew)view.findviewbyd(R.id.card\u视图);
price=(TextView)view.findViewById(R.id.prixprodtestcard);
name=(TextView)view.findViewById(R.id.nomprodtestcard);
namfou=(TextView)view.findViewById(R.id.qtestockcard);
评级=(TextView)view.findViewById(R.id.rating);
img=(ImageView)view.findViewById(R.id.imageprodcard);
btnlike=(FloatingActionButton)view.findViewById(R.id.likeButtoncard);
}
}
@凌驾
public MyTag onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.cardview,null);
返回新的MyTag(v);
}
@凌驾
public int getItemCount(){
返回listitem.size();
}
@凌驾
回收视图上的公共作废(MyTag持有者){
super.onViewRecycled(支架);
滑动。清除(保持架。img);
}
public void onBindViewHolder(最终MyTag持有者,最终int位置){
//法代因动画
YoYo.with(技巧.幻灯片)
.playOn(支架.cardView);
最终HashMap=(HashMap)listitem.get(位置);
if(map.get(“like”).equals(“0”)){
holder.btnlike.setImageResource(R.drawable.heart);
}否则{
holder.btnlike.setImageResource(R.drawable.ic_-like);
}
holder.img.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向i=新意向(ctx,InformationsProduit.class);
i、 putExtra(“nomProd”,map.get(“name”);
i、 putExtra(“prix”,map.get(“price”);
i、 putExtra(“nomFour”,nomesFo.get(position));
i、 putExtra(“图像”,img.get(位置));
i、 putExtra(“telFour”,map.get(“telefournisseur”);
i、 putExtra(“addrFour”,map.get(“addressfou”);
i、 putExtra(“idFour”,idfours.get(position));
i、 putExtra(“description”,description.get(position));
i、 putExtra(“代码条”,代码条);
星触觉(i);
}
});
holder.price.setText(map.get(“price”));
holder.name.setText(map.get(“name”));
保持器.namfou.setText(名称获取(位置));
holder.rating.setText(map.get(“rating”));
滑翔带(ctx)
.load(imgfou.get(位置))
//.diskCacheStrategy(diskCacheStrategy.NONE)
//.skipMemoryCache(真)
.缩略图(0.1f)
.into(holder.img);
holder.btnlike.setOnClickListener(新视图.OnClickListener(){
CardAdapter.MyTag hld=支架;
int pos=位置;
@凌驾
公共void onClick(视图arg0){
HashMapMapClicked=(HashMap)listitem.get(pos);
if(mapclicked.get(“like”).equals(“0”))
{
hld.btnlike.setImageResource(R.drawable.ic_-like);
mapplicked.put(“like”,“1”);
斯纳克巴;
snackbar=snackbar.make(hld.btnlike,“Bien ajour au prefere”,snackbar.LENGTH\u SHORT);
视图snackbar视图=snackbar.getView();
snackBarView.setBackgroundColor(颜色.绿色);
TextView TextView=(TextView)snackBarView.findviewbyd(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
snackbar.show();
db.insertFav(代码条、idforns.get(pos)、map.get(“名称”)、map.get(“价格”)、nomesFo.get(位置)、map.get(“地址”)、map.get(“Telefourniseur”)、img.get(位置));
hld.btnlike.startAnimation(animapp());
}否则{
hld.btnlike.setImageResource(R.drawable.heart);
mapclicked.put(“like”,“0”);
Snackbar.make(hld.btnlike,“从首选项中删除”,Snackbar.LENGTH_LONG).setAction(“Action”,null).show();
db.deleteR(codeBar,idforns.get(pos));
hld.btnlike.startAnimation(animapp());
}
}}
);
}
将其添加到标记
内的AndroidManifest.xml
中:
如果您试图同时获取所有图像,并且图像很大,那么可能是因为您的一次调用内存不足。如果您不这样做,请尝试单独调用以获取每个图像。@jack hardcastle数据导入数据库的方式或图像的大小是否可能有问题显示您的图像代码!您使用的是什么数据库?SQL Server?MySQL?Postrgres?在图像阵列中使用数据库SQL Server,尝试使用ArrayList并对图像使用位图我遇到过类似于
android:hardwareAccelerated="false"
android:largeHeap="true"