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を、pthreadおよびjsonパーサーとともに使用することもできます。ただし、問題は、pthreadを自分で管理する必要があることです。それはあなたが今しているようにそれをするよりも「厄介」です。繰り返しになりますが、JNIの使用も正確にはきれいではありません。これは大きなトレードオフの1つであり、おそらくJNIとAndroidJavaSDKに傾倒しています。

iOSとAndroidでは、pthreadは基盤となるスレッドメカニズムであり、iOSのNSOperationやAndroidのAsyncTaskなどを使用するとすでに管理されています(私は想定しています)。

于 2012-10-20T21:54:41.427 に答える