2012-01-13 70 views
2

我正在开发的PhoneGap的应用(Android),它使用JavaScript/HTML5 的localStorage。该应用程序工作正常,但是当我添加Admob到 该应用程序时,localStorage不起作用。含义 存储的值被删除时,应用程序被强制关闭或手机 重新启动。Android + HTML5(LocalStorage)+ Admob:Bug?

public class TestActivity extends DroidGap { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.loadUrl("file:///android_asset/www/index.html"); 

     // ADMOB: If comment, work. 
     /* 
     LinearLayout layout = super.root; 
     AdView adView = new AdView(this, AdSize.BANNER, **MY_CODE_ADMOB**); 
     layout.addView(adView); 
     AdRequest request = new AdRequest(); 
     adView.loadAd(request); 
     */ 
    } 
}   

谢谢!!

回答

10

你不得不推迟通过几秒钟启动广告的代码......下面为我工作。

public class youActivity extends DroidGap { 
private Handler mHandler = new Handler(); 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.loadUrl("file:///android_asset/www/index.html"); 
    mHandler.postDelayed(new Runnable() { 
     public void run() { 
      doStuff(); 
     } 
    }, 5000); 
} 
private void doStuff() { 
    final String MY_AD_UNIT_ID = "yourAD_UNIT_ID"; 
    AdView adView; 
    // Create the adView 
    adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); 
    LinearLayout layout = super.root; // this is the only change from the sample 
    // Add the adView to it 
    layout.addView(adView); 
    // Initiate a generic request to load it with an ad 
    adView.loadAd(new AdRequest()); 
} 
} 
+0

私人处理程序mHandler =新的处理程序();在Eclipse中显示“处理程序无法通过类型解析”错误。请帮我 – siva565 2013-10-30 13:37:05

+0

@ user1184211我们不能只是改变本地存储数据库名称,所以冲突会消失吗?我想为你建议使用SQL但由于其asinchronous :( – 2014-07-22 20:42:06

0

我在获得AdMob中使用的PhoneGap /科尔多瓦和我的数据库从APK到数据库的位置被复制一个SQLite文件存储一起工作exeprienced相同的问题。 我试过这里提到的延迟解决方案。我的观察结果是,要在创建AdRequest之前使用正确的数据访问数据库,需要完成window.openDatabase("xxx", "1.0", "xxx", 1000000);。这对我来说不是一个解决方案,因为在另一个页面上再次打开连接会导致数据库为空。

我解决这个问题的办法是用可在https://github.com/lite4cordova/Cordova-SQLitePlugin插件。它的工作方式与websql完全相同,不同之处在于以不同的方式打开数据库(如果您已经编写了查询,则不需要重写)。如果您在使用开启:

var db = window.sqlitePlugin.openDatabase({name: "DB"}); 

它将使用DB.db文件,而不是默认的0000000000000001.db。这应该可以防止与AdMob的冲突。两件事情需要注意的:

  1. 的插件需要ondeviceready被trigerred不仅仅是记录到 加载打开分贝。

  2. 如果你正在处理一个sqlite文件,你用apk发送 ,确保你调整了它的复制位置。

+0

我们不能只是改变localStorage的数据库名称,这样的冲突将会消失我无法从中获得价值?我想为你建议使用SQL,但我不能得到的值它作为它的同步:( – 2014-07-22 20:05:06