2012-01-13 44 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