Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android cocos2d-x:线程_Android_Cocos2d X - Fatal编程技术网

Android cocos2d-x:线程

Android cocos2d-x:线程,android,cocos2d-x,Android,Cocos2d X,我遇到了一个小问题:我需要在Android上使用cocos2d-x中的异步任务 private void parseJSONJava() throws ClientProtocolException, IOException, JSONException { STAJSONParser jPars = new STAJSONParser(); jPars.makeHttpRequest(String.format("%s/app/%s/json",STA_URL,STA_APP_

我遇到了一个小问题:我需要在Android上使用
cocos2d-x
中的异步任务

private void parseJSONJava() throws ClientProtocolException, IOException, JSONException
{
    STAJSONParser jPars = new STAJSONParser();
    jPars.makeHttpRequest(String.format("%s/app/%s/json",STA_URL,STA_APP_UID)); 
}
但此代码崩溃应用程序出现错误
,无法在未调用Looper.prepare()
的线程内创建处理程序。我通过添加
runOnUiThread
来解决这个问题:

me.runOnUiThread(new Runnable(){
public void run(){
    STAJSONParser jPars = new STAJSONParser();
    jPars.makeHttpRequest(String.format("%s/app/%s/json",STA_URL,STA_APP_UID)); 
}
});
“我”是我的活动。 来自STAJSONParser的代码:

public JSONObject makeHttpRequest(String url) {
AsyncGetJson Task= new AsyncGetJson(url);
try {
     return Task.execute().get();
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
 } catch (ExecutionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
 }
AsyncGetJson
task它是一个从服务器获取JSON的简单异步任务。
那么,我的问题是:这个解决方案是对的还是错的?或者你可以给我其他的解决方案?

我不明白你为什么不能这样做。您还可以像前面提到的m.ding一样使用libcurl,以及pthreads和json解析器。但问题是,您需要自己管理pthread。这比你现在这样做更“混乱”。再说一次,使用JNI也不是很好。这是一个巨大的权衡,可能倾向于支持JNI和Android Java SDK

iOS和Android,pType是底层线程机制,当你使用iOS的NScand和AsdioStasCaskTebug(我假设……)/P>时,已经为你管理了,是的,它是正确的(我相信这是最简单的方法。另一种方法是,在C++级别使用LIcCURL)。