触碰插页式广告时的应用"unfortunately stopped"
app "unfortunately stopped" when touching interstitial ads
我使用的是cocos2d-x 3.2,我想在用户触摸屏幕时显示间隙广告。但当我触摸屏幕时,我收到了"不幸停止"的消息。这是我的代码:
Java:
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
final String ADMOB_ID = "ca-app-pub-0000000000000000/0000000000";
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(ADMOB_ID);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest adRequest = new AdRequest.Builder().addTestDevice("3A34952B128D8DC19CCB75CA752ED31B").build();
interstitial.loadAd(adRequest);
}
public void showad() {
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
interstitial.show();
}
});
}
;
C++:
bool HelloWorld::onTouchBegan(cocos2d::Touch *touch , cocos2d::Event *event){
show();
}
void HelloWorld::show(){
cocos2d::JniMethodInfo methodInfo;
if (! cocos2d::JniHelper::getMethodInfo(methodInfo, "org/cocos2dx/cpp/AppActivity", "showad", "()V")) {
return;
}
methodInfo.env->CallVoidMethod(methodInfo.classID, methodInfo.methodID);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
我在logcat中得到了这个错误:
A/libc(6628): Fatal signal 11 (SIGSEGV) at 0x00020004 (code=1), thread 6643 (Thread-553)
有人能帮忙吗?(对不起英文:)
您必须首先加载广告,然后显示它:
private boolean adIsLoaded = false;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
final String ADMOB_ID = "ca-app-pub-0000000000000000/0000000000";
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(ADMOB_ID);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest adRequest = new AdRequest.Builder().addTestDevice("3A34952B128D8DC19CCB75CA752ED31B").build();
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
adIsLoaded=true;
}
});
interstitial.loadAd(adRequest);
}
public void showad() {
if (adIsLoaded)
interstitial.show();
}
}
由于这是一个SIGSEGV
崩溃,显然与您的java代码无关,问题出现在C++方面。
检查HelloWorld::show()
,在每一行之间打印日志,找出导致崩溃的行。这听起来很愚蠢,但很有效。
顺便说一句,你必须分析整个日志接近崩溃点,而不是崩溃时的线。
请尝试使用getStaticMethodInfo()和CallStaticVoidMethod()。还要使showad()成为一个静态函数。
它对我来说效果很好。但当我使用getMethodInfo()和CallVoidMethod()以及非静态java函数时,代码既不起作用,也不会崩溃。它根本没有任何作用。
还没弄清楚原因呢!
我用这种方式修复了它:
private static AppActivity _appActiviy;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
final String ADMOB_ID = "ca-app-pub-0000000000000000/0000000000";
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(ADMOB_ID);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest adRequest = new AdRequest.Builder().addTestDevice("3A34952B128D8DC19CCB75CA752ED31B").build();
interstitial.loadAd(adRequest);
}
public static void showAd(){
_appActiviy.runOnUiThread(new Runnable()
{
@Override
public void run(){
if (_appActiviy.interstitial.isLoaded())
{_appActiviy.interstitial.show();}
};
});}
c++
bool HelloWorld::onTouchBegan(cocos2d::Touch *touch , cocos2d::Event *event){
show();
}
void HelloWorld::show(){
cocos2d::JniMethodInfo methodInfo;
if (! cocos2d::JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/cpp/AppActivity", "showAd", "()V")) {
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 有没有任务栏API可以立即应用注册表更改
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 触碰插页式广告时的应用"unfortunately stopped"