简体   繁体   中英

AdMob crashes when start App

I'm completely new to Android Studio and Java, but managed to make my own app through many tutorials. The problem is that whenever I click my app in the home screen(Start Up / Boot Up), it'll immediately make me leave the apk(Crashes). I'm unsure why. I believe it's connected to my Main_Activity file, but I'm unsure. I followed the tutorial by Google, 'AdMob for Android - Get started in Android Studio' as well. I made a new blank android app and followed the tutorial, and it worked out fine. But, in my current app, it seems to crash on me.

If anyone has any idea on how to fix it, let me know. I've had this problem for two weeks now and still can't figure it out. Thank You. Here's my files for my current app:

Main_Activity.java:

package com.xxxxxxx.xxxxxxxxxxx;

import com.xxxxxxx.xxxxxxxx.R;
import android.annotation.TargetApi;
import android.graphics.RectF;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.util.SparseArrayCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.text.Spannable;
import android.text.SpannableString;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;

import com.astuetz.PagerSlidingTabStrip;
import com.flaviofaria.kenburnsview.KenBurnsView;
import com.nineoldandroids.view.ViewHelper;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

import java.util.Random;

public class MainActivity extends ActionBarActivity implements ScrollTabHolder, ViewPager.OnPageChangeListener {

private static AccelerateDecelerateInterpolator sSmoothInterpolator = new AccelerateDecelerateInterpolator();

private KenBurnsView mHeaderPicture;
private View mHeader;
private PagerSlidingTabStrip mPagerSlidingTabStrip;
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;
private Toolbar toolbar;
private TextView title;
private ImageView icon;
private int mActionBarHeight;
private int mMinHeaderHeight;
private int mHeaderHeight;
private int mMinHeaderTranslation;
private ImageView mHeaderLogo;
private RectF mRect1 = new RectF();
private RectF mRect2 = new RectF();
private TypedValue mTypedValue = new TypedValue();
private SpannableString mSpannableString;
private AlphaForegroundColorSpan mAlphaForegroundColorSpan;

int[] photos={R.drawable.photo1, R.drawable.phpto2, R.drawable.photo3, R.drawable.photo4, R.drawable.photo5, R.drawable.photo6, R.drawable.photo7, R.drawable.photo8, R.drawable.photo9};
KenBurnsView imageView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  AdView mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); 
    mMinHeaderHeight = getResources().getDimensionPixelSize(R.dimen.min_header_height);
    mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
    mMinHeaderTranslation = -mMinHeaderHeight + getActionBarHeight();

    setContentView(R.layout.activity_main);
    imageView =(KenBurnsView) findViewById(R.id.header_picture);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    icon = (ImageView) findViewById(R.id.icon);
    title = (TextView) findViewById(R.id.title);
    mSpannableString = new SpannableString(getString(R.string.actionbar_title));

    mHeaderLogo = (ImageView) findViewById(R.id.header_thumbnail);
    mHeader = findViewById(R.id.header);
    mPagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setOffscreenPageLimit(4);
    mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
    mPagerAdapter.setTabHolderScrollingContent(this);
    mViewPager.setAdapter(mPagerAdapter);
    mPagerSlidingTabStrip.setViewPager(mViewPager);
    mPagerSlidingTabStrip.setOnPageChangeListener(this);
    mAlphaForegroundColorSpan = new AlphaForegroundColorSpan(0xffffffff);
    ViewHelper.setAlpha(getActionBarIconView(), 0f);

    getSupportActionBar().setBackgroundDrawable(null);

    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        int i=0;
        public void run() {
            // change images randomly
            Random ran=new Random();
            int i=ran.nextInt(photos.length);
            //set image resources
            imageView.setImageResource(photos[i]);
            i++;
            if(i>photos.length-1)
            {
                i=0;
            }
            handler.postDelayed(this, 7000);  //for interval...
        }
    };
    handler.postDelayed(runnable, 7000); //for initial delay..
}

@Override
public void onPageScrollStateChanged(int arg0) {
    // nothing
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    // nothing
}

@Override
public void onPageSelected(int position) {
    SparseArrayCompat<ScrollTabHolder> scrollTabHolders = mPagerAdapter.getScrollTabHolders();
    ScrollTabHolder currentHolder = scrollTabHolders.valueAt(position);
    currentHolder.adjustScroll((int) (mHeader.getHeight() + ViewHelper.getTranslationY(mHeader)), mHeaderHeight);

}

@Override
public void onScroll(ScrollView view, int x, int y, int oldX, int oldY, int pagePosition)
{
    if (mViewPager.getCurrentItem() == pagePosition)
    {
        mHeader.setTranslationY(Math.max(-view.getScrollY(), mMinHeaderTranslation));
        float ratio = clamp(mHeader.getTranslationY() / mMinHeaderTranslation, 0.0f, 1.0f);
        interpolate(mHeaderLogo, getActionBarIconView(), sSmoothInterpolator.getInterpolation(ratio));
        setTitleAlpha(clamp(5.0F * ratio - 4.0F, 0.0F, 1.0F));
    }
}

@Override
public void adjustScroll(int scrollHeight,int headerTranslationY) {
    // nothing
}



public static float clamp(float value, float max, float min) {
    return Math.max(Math.min(value, min), max);
}

private void interpolate(View view1, View view2, float interpolation) {
    getOnScreenRect(mRect1, view1);
    getOnScreenRect(mRect2, view2);

    float scaleX = 1.0F + interpolation * (mRect2.width() / mRect1.width() - 1.0F);
    float scaleY = 1.0F + interpolation * (mRect2.height() / mRect1.height() - 1.0F);
    float translationX = 0.5F * (interpolation * (mRect2.left + mRect2.right - mRect1.left - mRect1.right));
    float translationY = 0.5F * (interpolation * (mRect2.top + mRect2.bottom - mRect1.top - mRect1.bottom));

    ViewHelper.setTranslationX(view1, translationX);
    ViewHelper.setTranslationY(view1, translationY - ViewHelper.getTranslationY(mHeader));
    ViewHelper.setScaleX(view1, scaleX);
    ViewHelper.setScaleY(view1, scaleY);
}

private RectF getOnScreenRect(RectF rect, View view) {
    rect.set(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
    return rect;
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public int getActionBarHeight() {
    if (mActionBarHeight != 0) {
        return mActionBarHeight;
    }

    if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB){
        getTheme().resolveAttribute(android.R.attr.actionBarSize, mTypedValue, true);
    }else{
        getTheme().resolveAttribute(R.attr.actionBarSize, mTypedValue, true);
    }

    mActionBarHeight = TypedValue.complexToDimensionPixelSize(mTypedValue.data, getResources().getDisplayMetrics());

    return mActionBarHeight;
}

private void setTitleAlpha(float alpha) {
    mAlphaForegroundColorSpan.setAlpha(alpha);
    mSpannableString.setSpan(mAlphaForegroundColorSpan, 0, mSpannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    title.setText(mSpannableString);
}

private ImageView getActionBarIconView() {
    return icon;
}

public class PagerAdapter extends FragmentPagerAdapter {

    private SparseArrayCompat<ScrollTabHolder> mScrollTabHolders;
    private final String[] TITLES = { "Home", "Install", "About", "Media", "Survey", "Upcoming", "News", "Help", "Credits", "Share", "More"};
    private ScrollTabHolder mListener;

    public PagerAdapter(FragmentManager fm) {
        super(fm);
        mScrollTabHolders = new SparseArrayCompat<ScrollTabHolder>();
    }

    public void setTabHolderScrollingContent(ScrollTabHolder listener) {
        mListener = listener;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

    @Override
    public int getCount() {
        return TITLES.length;
    }

    @Override
    public Fragment getItem(int position) {
        ScrollTabHolderFragment fragment = (ScrollTabHolderFragment) ScrollViewFragment.newInstance(position);
        mScrollTabHolders.put(position, fragment);
        if (mListener != null) {
            fragment.setScrollTabHolder(mListener);
        }
        return fragment;
    }

    public SparseArrayCompat<ScrollTabHolder> getScrollTabHolders() {
        return mScrollTabHolders;
    }

}

public class LinkButtons extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void goToSo (View view) {
        goToUrl ( "http://stackoverflow.com/");
    }

    public void goToSu (View view) {
        goToUrl ( "http://superuser.com/");
    }

    private void goToUrl (String url) {
        Uri uriUrl = Uri.parse(url);
        Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
        startActivity(launchBrowser);
    }

}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent" >

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<FrameLayout
    android:id="@+id/header"
    android:layout_width="match_parent"
    android:layout_height="298dp" >

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>

    <com.flaviofaria.kenburnsview.KenBurnsView
        android:id="@+id/header_picture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/photo1"
      />

    <ImageView
        android:id="@+id/header_thumbnail"
        android:layout_width="@dimen/header_logo_size"
        android:layout_height="@dimen/header_logo_size"
        android:layout_gravity="center"
        android:src="@drawable/header_thumbnail" />

    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="48dip"
        android:layout_gravity="bottom"
        android:textColor="#ffffff"
        app:pstsIndicatorColor="#ffffff"
        app:pstsDividerColor="@android:color/transparent"
        android:background="@android:color/transparent" />
</FrameLayout>

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="56dp" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
        <ImageView
            android:id="@+id/icon"
            android:layout_marginLeft="12dp"
            android:layout_marginTop="6dp"
            android:layout_marginBottom="6dp"
            android:layout_width="44dp"
            android:layout_height="44dp" />
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" />
    </LinearLayout>
</android.support.v7.widget.Toolbar>

Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">A Random App</string>
<string name="hello_world">This is a Test.</string>
<string name="action_settings">Settings[BETA]</string>
<string name="actionbar_title">A Random App.</string>
<string name="banner_ad_unit_id">ca-app-pub-xxxxxxxxxxxxxxx/xxxxxxxxxxxxx</string>
<string name="subscribe"><a href="https://www.google.com">Google</a></string>
<string name="apps"><a href="https://www.google.pl/">Google</a></string>
<string name="extra"><a href="https://www.google.pl/">Google</a></string>

build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
    applicationId "com.xrevolt.mmxstructures"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 2
    versionName "1.2.0"
}

buildTypes {
    release {
        apply plugin: 'announce'
        /*
        runProguard false
        */
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.+'
compile 'com.android.support:cardview-v7:21+'
compile 'com.flaviofaria:kenburnsview:1.0.5'
compile 'com.jpardogo.materialtabstrip:library:1.0.6'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.google.android.gms:play-services-ads:8.4.0'
}

Well, I fixed it. But now the AdMob Banner is popping up at the top behind the scrolling images. I want it to be at the bottom and stay there with the scrollView class.

Fix:

package com.xxxxxxx.xxxxxxxxxxx;

import com.xxxxxxx.xxxxxxxx.R;
import android.annotation.TargetApi;
import android.graphics.RectF;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.util.SparseArrayCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.text.Spannable;
import android.text.SpannableString;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;

import com.astuetz.PagerSlidingTabStrip;
import com.flaviofaria.kenburnsview.KenBurnsView;
import com.nineoldandroids.view.ViewHelper;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

import java.util.Random;

public class MainActivity extends ActionBarActivity implements         ScrollTabHolder, ViewPager.OnPageChangeListener {

private static AccelerateDecelerateInterpolator sSmoothInterpolator = new AccelerateDecelerateInterpolator();

private KenBurnsView mHeaderPicture;
private View mHeader;
private PagerSlidingTabStrip mPagerSlidingTabStrip;
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;
private Toolbar toolbar;
private TextView title;
private ImageView icon;
private int mActionBarHeight;
private int mMinHeaderHeight;
private int mHeaderHeight;
private int mMinHeaderTranslation;
private ImageView mHeaderLogo;
private RectF mRect1 = new RectF();
private RectF mRect2 = new RectF();
private TypedValue mTypedValue = new TypedValue();
private SpannableString mSpannableString;
private AlphaForegroundColorSpan mAlphaForegroundColorSpan;

int[] photos={R.drawable.photo1, R.drawable.phpto2, R.drawable.photo3,     R.drawable.photo4, R.drawable.photo5, R.drawable.photo6, R.drawable.photo7,     R.drawable.photo8, R.drawable.photo9};
KenBurnsView imageView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mMinHeaderHeight = getResources().getDimensionPixelSize(R.dimen.min_header_height);
mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
mMinHeaderTranslation = -mMinHeaderHeight + getActionBarHeight();

setContentView(R.layout.activity_main);
imageView =(KenBurnsView) findViewById(R.id.header_picture);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
icon = (ImageView) findViewById(R.id.icon);
title = (TextView) findViewById(R.id.title);
mSpannableString = new               SpannableString(getString(R.string.actionbar_title));

mHeaderLogo = (ImageView) findViewById(R.id.header_thumbnail);
mHeader = findViewById(R.id.header);
mPagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(4);
mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
mPagerAdapter.setTabHolderScrollingContent(this);
mViewPager.setAdapter(mPagerAdapter);
mPagerSlidingTabStrip.setViewPager(mViewPager);
mPagerSlidingTabStrip.setOnPageChangeListener(this);
mAlphaForegroundColorSpan = new AlphaForegroundColorSpan(0xffffffff);
ViewHelper.setAlpha(getActionBarIconView(), 0f);

getSupportActionBar().setBackgroundDrawable(null);

final Handler handler = new Handler();
Runnable runnable = new Runnable() {
    int i=0;
    public void run() {
        // change images randomly
        Random ran=new Random();
        int i=ran.nextInt(photos.length);
        //set image resources
        imageView.setImageResource(photos[i]);
        i++;
        if(i>photos.length-1)
        {
            i=0;
        }
        handler.postDelayed(this, 7000);  //for interval...
    }
};
handler.postDelayed(runnable, 7000); //for initial delay..

AdView mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);

}

@Override
public void onPageScrollStateChanged(int arg0) {
// nothing
}

@Override
public void onPageScrolled(int position, float positionOffset, int     positionOffsetPixels) {
// nothing
}

@Override
public void onPageSelected(int position) {
SparseArrayCompat<ScrollTabHolder> scrollTabHolders =     mPagerAdapter.getScrollTabHolders();
ScrollTabHolder currentHolder = scrollTabHolders.valueAt(position);
currentHolder.adjustScroll((int) (mHeader.getHeight() +     ViewHelper.getTranslationY(mHeader)), mHeaderHeight);

}

@Override
public void onScroll(ScrollView view, int x, int y, int oldX, int oldY,     int pagePosition)
{
if (mViewPager.getCurrentItem() == pagePosition)
{
    mHeader.setTranslationY(Math.max(-view.getScrollY(),     mMinHeaderTranslation));
    float ratio = clamp(mHeader.getTranslationY() /     mMinHeaderTranslation, 0.0f, 1.0f);
    interpolate(mHeaderLogo, getActionBarIconView(),     sSmoothInterpolator.getInterpolation(ratio));
    setTitleAlpha(clamp(5.0F * ratio - 4.0F, 0.0F, 1.0F));
}
}

@Override
public void adjustScroll(int scrollHeight,int headerTranslationY) {
// nothing
}



public static float clamp(float value, float max, float min) {
return Math.max(Math.min(value, min), max);
}

private void interpolate(View view1, View view2, float interpolation) {
getOnScreenRect(mRect1, view1);
getOnScreenRect(mRect2, view2);

float scaleX = 1.0F + interpolation * (mRect2.width() / mRect1.width() - 1.0F);
float scaleY = 1.0F + interpolation * (mRect2.height() / mRect1.height() - 1.0F);
float translationX = 0.5F * (interpolation * (mRect2.left + mRect2.right - mRect1.left - mRect1.right));
float translationY = 0.5F * (interpolation * (mRect2.top +     mRect2.bottom - mRect1.top - mRect1.bottom));

ViewHelper.setTranslationX(view1, translationX);
ViewHelper.setTranslationY(view1, translationY -     ViewHelper.getTranslationY(mHeader));
ViewHelper.setScaleX(view1, scaleX);
ViewHelper.setScaleY(view1, scaleY);
}

private RectF getOnScreenRect(RectF rect, View view) {
rect.set(view.getLeft(), view.getTop(), view.getRight(),     view.getBottom());
return rect;
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public int getActionBarHeight() {
if (mActionBarHeight != 0) {
    return mActionBarHeight;
}

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB){
    getTheme().resolveAttribute(android.R.attr.actionBarSize,     mTypedValue, true);
}else{
    getTheme().resolveAttribute(R.attr.actionBarSize, mTypedValue,     true);
}

mActionBarHeight =     TypedValue.complexToDimensionPixelSize(mTypedValue.data,         getResources().getDisplayMetrics());

return mActionBarHeight;
}

private void setTitleAlpha(float alpha) {
mAlphaForegroundColorSpan.setAlpha(alpha);
mSpannableString.setSpan(mAlphaForegroundColorSpan, 0,     mSpannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
title.setText(mSpannableString);
}

private ImageView getActionBarIconView() {
return icon;
}

public class PagerAdapter extends FragmentPagerAdapter {

private SparseArrayCompat<ScrollTabHolder> mScrollTabHolders;
private final String[] TITLES = { "Home", "Install", "About", "Media",     "Survey", "Upcoming", "News", "Help", "Credits", "Share", "More"};
private ScrollTabHolder mListener;

public PagerAdapter(FragmentManager fm) {
    super(fm);
    mScrollTabHolders = new SparseArrayCompat<ScrollTabHolder>();
}

public void setTabHolderScrollingContent(ScrollTabHolder listener) {
    mListener = listener;
}

@Override
public CharSequence getPageTitle(int position) {
    return TITLES[position];
}

@Override
public int getCount() {
    return TITLES.length;
}

@Override
public Fragment getItem(int position) {
    ScrollTabHolderFragment fragment = (ScrollTabHolderFragment)         ScrollViewFragment.newInstance(position);
    mScrollTabHolders.put(position, fragment);
    if (mListener != null) {
        fragment.setScrollTabHolder(mListener);
    }
    return fragment;
}

public SparseArrayCompat<ScrollTabHolder> getScrollTabHolders() {
    return mScrollTabHolders;
}

}

public class LinkButtons extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void goToSo (View view) {
    goToUrl ( "http://stackoverflow.com/");
}

public void goToSu (View view) {
    goToUrl ( "http://superuser.com/");
}

private void goToUrl (String url) {
    Uri uriUrl = Uri.parse(url);
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
    startActivity(launchBrowser);
}

}

}

Anyone have a code to fix that?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM