如何使用网络视图或在AndEngine中打开URL-Android



我在Android应用程序中使用一个名为AndEngine的游戏引擎(我对它完全陌生)。我需要根据屏幕上操纵杆的位置从应用程序加载不同的URL(上传到.cgi服务器)。困境是我无法打开URL连接!这可能看起来很简单,但我四处寻找,尝试了多种解决方案,但都没有奏效。在基本的Android中,我一直使用WebView(loadUrl()方法),而且效果很好。然而,我不知道如何在使用AndEngine的同时创建网络视图。我的偏好是连接没有显示(加载在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:设置了Internet权限,编译器最初为1.6。仍然不知道问题是什么。

  1. xml <manifest xlmns:android...> ... <uses-permission android:name="android.permission.INTERNET"/> </manifest>

  2. 将java编译器合规性设置为1.6

我解决了我的问题。我必须在独立于主线程的线程上运行所有网络操作(否则它将引发NetworkOnMainThread异常)。我不知道为什么其他什么都不起作用,但这起到了作用!在这里,我创建了一个带有我想要执行的操作的新线程,然后在处理了异常之后启动它。我在这里找到了答案

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(); 

相关内容

  • 没有找到相关文章

最新更新