我的应用程序出现了很多关于此问题的错误,我是编码新手,所以我很感激一些帮助。
我有一个应用程序,其中包含一些用户可以设置为壁纸的图像,图像是可绘制的,我将它们放在HorizontalScrollView中,我还有一个显示所选图像的ImageView。
这就是我的Main.java的样子:
public class Main extends Activity implements OnClickListener {
ImageView display;
int wallPaper;
private AdView adView;
Bitmap setWall2;
Bitmap setWall3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* START OF AdMob */
// Create the adView
adView = new AdView(this, AdSize.BANNER, "***************");
// Lookup your LinearLayout assuming it’s been given
// the attribute android:id="@+id/mainLayout"
TableRow layout = (TableRow)findViewById(R.id.adView);
// Add the adView to it
layout.addView(adView);
// Initiate a generic request to load it with an ad
adView.loadAd(new AdRequest());
/* END OF AdMob */
wallPaper = R.drawable.image1;
display = (ImageView) findViewById(R.id.iViewMain);
ImageView image1 = (ImageView) findViewById(R.id.image1);
ImageView image2 = (ImageView) findViewById(R.id.image2);
ImageView image3 = (ImageView) findViewById(R.id.image3);
ImageView image4 = (ImageView) findViewById(R.id.image4);
ImageView image5 = (ImageView) findViewById(R.id.image5);
ImageView image6 = (ImageView) findViewById(R.id.image6);
ImageView image7 = (ImageView) findViewById(R.id.image7);
ImageView image8 = (ImageView) findViewById(R.id.image8);
ImageView image9 = (ImageView) findViewById(R.id.image9);
ImageView image10 = (ImageView) findViewById(R.id.image10);
ImageView image11 = (ImageView) findViewById(R.id.image11);
ImageView image12 = (ImageView) findViewById(R.id.image12);
ImageView image13 = (ImageView) findViewById(R.id.image13);
Button setWall = (Button) findViewById(R.id.setWall);
image1.setOnClickListener(this);
image2.setOnClickListener(this);
image3.setOnClickListener(this);
image4.setOnClickListener(this);
image5.setOnClickListener(this);
image6.setOnClickListener(this);
image7.setOnClickListener(this);
image8.setOnClickListener(this);
image9.setOnClickListener(this);
image10.setOnClickListener(this);
image11.setOnClickListener(this);
image12.setOnClickListener(this);
image13.setOnClickListener(this);
setWall.setOnClickListener(this);
}
@SuppressWarnings("deprecation")
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.image1:
display.setImageResource(R.drawable.image1);
wallPaper = R.drawable.image1;
break;
case R.id.image2:
display.setImageResource(R.drawable.image2);
wallPaper = R.drawable.image2;
break;
case R.id.image3:
display.setImageResource(R.drawable.image3);
wallPaper = R.drawable.image3;
break;
case R.id.image4:
display.setImageResource(R.drawable.image4);
wallPaper = R.drawable.image4;
break;
case R.id.image5:
display.setImageResource(R.drawable.image5);
wallPaper = R.drawable.image5;
break;
case R.id.image6:
display.setImageResource(R.drawable.image6);
wallPaper = R.drawable.image6;
break;
case R.id.image7:
display.setImageResource(R.drawable.image7);
wallPaper = R.drawable.image7;
break;
case R.id.image8:
display.setImageResource(R.drawable.image8);
wallPaper = R.drawable.image8;
break;
case R.id.image9:
display.setImageResource(R.drawable.image9);
wallPaper = R.drawable.image9;
break;
case R.id.image10:
display.setImageResource(R.drawable.image10);
wallPaper = R.drawable.image10;
break;
case R.id.image11:
display.setImageResource(R.drawable.image11);
wallPaper = R.drawable.image11;
break;
case R.id.image12:
display.setImageResource(R.drawable.image12);
wallPaper = R.drawable.image12;
break;
case R.id.image13:
display.setImageResource(R.drawable.image13);
wallPaper = R.drawable.image13;
break;
case R.id.setWall:
InputStream setWall3 = getResources().openRawResource(wallPaper);
Bitmap setWall2 = BitmapFactory.decodeStream(setWall3);
try {
getApplicationContext().setWallpaper(setWall2);
Context context = getApplicationContext();
CharSequence text = "Wallpaper set!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.setGravity(Gravity.TOP|Gravity.RIGHT, 0, 0);
toast.show();
} catch(IOException e) {
e.printStackTrace();
}
break;
}
System.gc();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.gc();
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
display = null;
setWall2 = null;
setWall3 = null;
System.gc();
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
ImageView image1 = (ImageView) findViewById(R.id.image1);
image1.setImageDrawable(null);
ImageView image2 = (ImageView) findViewById(R.id.image2);
image2.setImageDrawable(null);
ImageView image3 = (ImageView) findViewById(R.id.image3);
image3.setImageDrawable(null);
ImageView image4 = (ImageView) findViewById(R.id.image4);
image4.setImageDrawable(null);
ImageView image5 = (ImageView) findViewById(R.id.image5);
image5.setImageDrawable(null);
ImageView image6 = (ImageView) findViewById(R.id.image6);
image6.setImageDrawable(null);
ImageView image7 = (ImageView) findViewById(R.id.image7);
image7.setImageDrawable(null);
ImageView image8 = (ImageView) findViewById(R.id.image8);
image8.setImageDrawable(null);
ImageView image9 = (ImageView) findViewById(R.id.image9);
image9.setImageDrawable(null);
ImageView image10 = (ImageView) findViewById(R.id.image10);
image10.setImageDrawable(null);
ImageView image11 = (ImageView) findViewById(R.id.image11);
image11.setImageDrawable(null);
ImageView image12 = (ImageView) findViewById(R.id.image12);
image12.setImageDrawable(null);
ImageView image13 = (ImageView) findViewById(R.id.image13);
image13.setImageDrawable(null);
display = null;
setWall2 = null;
setWall3 = null;
System.gc();
super.onDestroy();
}
}
谢谢!
答案 0 :(得分:1)
您是否关注Youtube上的教程?我也从其中的一些开始,但是在复合视图/ ViewGroups方面学到了一些非常低效的编码实践。首先,你真的不应该静态地创建这么多的imageView对象,并为每个对象设置单独的监听器。这真的是一种非常糟糕的做法。所以完全避免这种方法。我的观点是,从现在开始习惯以正确的方式做事,所以你不必再回来更改/重新学习/猛烈地撞到墙上:),就像我一样!
您需要使用GridView,ListView,ViewFlipper,Gallery或专门为此目的而构建的其他类型的容器。在使用当前方法时,您将不断遇到位图和OOM错误