0

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

private void parseJSONJava() throws ClientProtocolException, IOException, JSONException
{
    STAJSONParser jPars = new STAJSONParser();
    jPars.makeHttpRequest(String.format("%s/app/%s/json",STA_URL,STA_APP_UID)); 
}

但是此代码使应用程序崩溃并出现错误Can't create handler inside thread that has not called 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任务它是一个从服务器获取 JSON 的简单 AsyncTask。所以,我的问题是:这个解决方案是对还是错?或者你可以给我其他解决方案吗?

4

1 回答 1

0

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

在 iOS 和 Android 上,pthread 是底层线程机制,当您使用 iOS 的 NSOperation 和 Android 的 AsyncTask 之类的东西时,它已经为您管理好了(我假设..)

于 2012-10-20T21:54:41.427 回答