通过jni调用在android上显示toast消息

时间:2012-07-23 07:01:37

标签: java android cocos2d-x

我已经按照this教程通过jni调用在android上启动了一个url。它运行成功。
以同样的方式,我想从我的cocos2dx层显示一个toast消息,如下所示:

public static void openURL(String url) {
  Toast.makeText(me,url,Toast.LENGTH_LONG).show();
}

但它崩溃了错误:Can't create handler with thread。你知道我怎么才能正确显示它?

3 个答案:

答案 0 :(得分:2)

尝试以下代码,这肯定会为您效劳。

  • 首先在类文件中创建一个Runnable接口,如下所示

    Runnable runnable = new Runnable() {    
    
    @Override
    
    public void run() {
     // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "Your url string...",Toast.LENGTH_SHORT).show();
    }};
    
  • 然后创建一个Handler对象并调用下面的runnable接口,

    Create Handler object like,
    
    Handler handler;
    
    initialize it like,
    
    onCreate(){
        .................
        handler = new Handler();
        .................
    }
    
    then call runnable whenever you want like,
    
    handler.post(runnable);
    

答案 1 :(得分:0)

您无法在后台线程上运行UI内容。 您应该使用AsyncTask并将该代码放在执行前/后执行中,或者如果您只显示一个Toast,则可以在UI线程上运行它

runOnUiThread(new Runnable() {
}

答案 2 :(得分:0)

所以这是从2012年开始的。

我猜不是很多人使用cocos2d-x。 好的,你如何在cocos2d-x上做到这一点。

修改 AppActivity.java

    public class AppActivity extends Cocos2dxActivity
    {
    private Activity activity;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.activity = this;
        showToast();
    }

    public void showToast()
    {
        activity.runOnUiThread(new Runnable()
        {

            @Override
            public void run()
            {
                // TODO Auto-generated method stub
                Toast.makeText(activity, "Hello :D", 10).show();
            }
        });
    }

    }

这在cocos2d-x版本3.x中非常好用 我测试一下当然JNI会调用该方法,这必须有效。