Reputation: 112
I get in a lot of errors for my app about this, im new in coding so I would appreciate some help.
I have an app with some images that the user can set as wallpapers, the images are in drawable and I have them in a HorizontalScrollView and I have also a ImageView that shows the selected images.
This is how my Main.java looks:
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();
}
}
Thanks!
Upvotes: 0
Views: 236
Reputation: 4816
Are you following the tutorials on Youtube? I started with some of those too, but learned some pretty inefficient coding practices in regards to composite views/ViewGroups. First, you really shouldn't be creating so many imageView objects statically and setting individual listeners to each. This is REALLY REALLY bad practice. So avoid this approach altogether. My point is, get used to doing things the correct way from now, so you won't have to come back and change/re-learn/bang your head against the wall too much :), like I did!
You need to use a GridView, ListView, ViewFlipper, Gallery or another type of container that was built specifically for this purpose. You will constantly run into bitmap and OOM errors while using your current approach
Upvotes: 1