我在我的Android应用程序中使用了一个名为AndEngine的游戏引擎(我完全是新手)。我需要根据屏幕操纵杆所处的位置(上传到.cgi服务器)从应用程序加载不同的URL。困境是我无法打开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();
}
}
}
}
**我之前尝试过使用HTTPConnection类(没有AndEngine)来打开一个URL,但无济于事。所以可能是我在这里做错了。使用AndEngine GLES2。如果需要更多信息,请告诉我(这是我关于SO的第一个问题)。
还尝试使用
在AndEngine上设置我的.xml版面@Override
protected int getLayoutID() {
return R.layout.main;
}
但它说:“Control类型的方法getLayoutID()必须覆盖或实现超类型方法”
编辑 以回应Nicolas Gramlich:设置了互联网权限,编译器最初为1.6。还是不知道是什么问题。
答案 0 :(得分:3)
xml
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
将java编译器合规性设置为1.6
答案 1 :(得分:3)
我解决了我的问题。我必须在与主要线程分开的线程上运行所有网络操作(否则它将抛出NetworkOnMainThread异常)。我不知道为什么没有其他工作,但这就行了!在这里,我使用我想要执行的操作创建一个新线程,然后在处理异常后启动它。我找到了答案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();