2

私は Android アプリで AndEngine というゲーム エンジン (まったくの初心者です) を使用しています。画面上のジョイスティックの位置に基づいて、アプリケーションから別の URL をロードする必要があります (.cgi サーバーへのアップロード)。ジレンマは、URL 接続を開けないことです! これは単純に思えるかもしれませんが、私はあらゆる場所を調べ、複数の解決策を試しましたが、何も機能しませんでした。基本的な Android では、常に WebView (loadUrl() メソッド) を使用してきましたが、うまく機能しました。ただし、AndEngine を使用しながら webview を作成する方法がわかりません。私の好みは、接続が表示されないことです (AndEngine シーンの下にロードされますか?)。他のことのために画面が必要になるからです。他の解決策も試しました。このコードを試してみましたが、サーバーを確認したところ、何も開かれていませんでした:

    @Override
public void onLoadResources() {

    //methods n/a to this question

    try {
        URL url = new URL(setUrl);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        readStream(con.getInputStream());
    } catch (Exception e) {
        e.printStackTrace();
    }

    return scene; // AndEngine return statement
}

private void readStream(InputStream in) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

**以前に (AndEngine なしで) HTTPConnection クラスを使用して URL を開くことを試みましたが、役に立ちませんでした。ですから、ここで何か間違ったことをしていたのかもしれません。AndEngine GLES2 を使用。さらに情報が必要な場合は、お知らせください (これが SO に関する最初の質問です)。

また、AndEngine を使用して .xml レイアウトを設定しようとしました

@Override
protected int getLayoutID() {
return R.layout.main;
}

しかし、次のように書かれています:「タイプControlのメソッドgetLayoutID()は、スーパータイプメソッドをオーバーライドまたは実装する必要があります」

Nicolas Gramlich に応じて編集: インターネット アクセス許可が設定され、コンパイラは元々 1.6 でした。何が問題なのかはまだわかりません。

4

2 に答える 2

3

I solved my issue. I had to run all network operations on a thread separate from the main one (else it will throw a NetworkOnMainThread exception). I don't know why nothing else worked, but this did the trick! Here I'm creating a new thread with the action I want to perform, and then starting it after exceptions are taken care of. I found my answer here

new Thread(new Runnable() {
public void run() {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("your_url");
try {
HttpResponse response = httpClient.execute(httpGet, localContext);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); 
于 2012-08-08T18:23:17.067 に答える
3
  1. xml <manifest xlmns:android...> ... <uses-permission android:name="android.permission.INTERNET"/> </manifest>

  2. Java コンパイラ準拠を 1.6 に設定

于 2012-08-02T18:29:51.930 に答える