0

大家好,我正在创建一个 Android 应用程序,它使用网络连接来获取一个简单的 .php 页面,该页面仅显示当前访问者计数器。

根据标准,我尝试使用 asynctask 类在不同的线程上实现网络连接和网页获取,但是,我遇到了一些问题。

这是代码

public void myClickHandler(View view) {
    // Gets the URL from the UI's text field.
    String stringUrl = urlText.getText().toString();
    //String stringUrl = "android.bisoft.in/index.php";
    ConnectivityManager connMgr = (ConnectivityManager) 
        getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        new DownloadWebpageTask().execute(stringUrl);
    } else {
        textView.setText("No network connection available.");
    }
}private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {

        // params comes from the execute() call: params[0] is the url.
        try {
            return downloadUrl(urls[0]);
        } catch (IOException e) {
            return "Unable to retrieve web page. URL may be invalid.";
        }
    }
    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(String result) {
        textView.setText(result);

   }
}private String downloadUrl(String myurl) throws IOException {
  InputStream is = null;
  // Only display the first 500 characters of the retrieved
  // web page content.
  int len = 500;

  try {
      URL url = new URL(myurl);
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setReadTimeout(10000 /* milliseconds */);
      conn.setConnectTimeout(15000 /* milliseconds */);
      conn.setRequestMethod("GET");
      conn.setDoInput(true);
      // Starts the query
      conn.connect();
      int response = conn.getResponseCode();
      Log.d(DEBUG_TAG, "The response is: " + response);
      is = conn.getInputStream();

      // Convert the InputStream into a string
      String contentAsString = readIt(is, len);
      return contentAsString;

  // Makes sure that the InputStream is closed after the app is
  // finished using it.
  } finally {
      if (is != null) {
          is.close();
      } }}//Reads an InputStream and converts it to a String. public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {Reader reader = null;reader = new InputStreamReader(stream, "UTF-8");        char[] buffer = new char[len];reader.read(buffer);return new String(buffer);}}`

当我运行项目时,(使用安卓设备模拟器),它根本没有连接到互联网,即它甚至没有显示“没有可用的网络连接”。错误,它只是显示带有默认值的文本视图。

我尝试下载 bluestacks 模拟器并在其中运行它,同样的事情发生了,只是 textview 显示没有任何网页被获取或没有显示任何互联网连接活动的迹象。

当我在网上搜索时,我发现我的设备模拟器的互联网连接可能存在问题,我目前正在使用有线宽带连接在 PC 上进行开发和测试。

我试着这样做

" 在 Eclipse 中转到 DDMS

在 DDMS 下选择 Emulator Control ,其中包含 Telephony Status 在电话状态中包含数据 --> 选择 Home ,这将启用您的 Internet 连接,如果您想禁用 Emulator 的 Internet 连接然后 ---> 选择 None

(注意:只有在运行 Eclipse 的 PC/笔记本电脑有活动的互联网连接时,这才会启用互联网连接。)“ - 来自 stackoverflow 的一些回答者

但是当我从 sdk 的工具目录中打开 ddms.bat 时,它向我显示了一个警告,该批处理文件已被弃用,我忽略了它,我导航到模拟器控制,但我什至无法选择或与之交互该选项卡中的任何内容以及所有按钮和文本框都显示为灰色。

提前感谢您的帮助。

编辑:

我已经使用了互联网连接检查和使用的两个必要权限

"<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />"

我试图在三星 Galaxy y duos lite 中运行它,应用程序运行但同样的问题仍然存在,手机没有连接到网络,所以我认为应该显示“没有互联网连接”消息,但是,它只显示文本字段的默认值。非常感谢任何帮助,因为我束手无策。

4

2 回答 2

1

使用droidQuery库可以更轻松地完成此任务:

$.ajax(new AjaxOptions().url(stringUrl)
                        .type("GET")
                        .dataType("String")
                        .success(new Function() {
                            @Override
                            public void invoke($ droidQuery, Object... params) {
                                textView.setText((String) params[0]);
                            }
                        })
                        .error(new Function() {
                            @Override
                            public void invoke($ droidQuery, Object... params) {
                                textView.setText("Unable to retrieve web page. URL may be invalid.");
                            }
                        }));
于 2013-07-26T16:14:12.317 回答
0

您是否在清单中编写了良好的权限?

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

你真的应该在真机上试一试。模拟器很难设置互联网连接。

于 2013-07-26T14:31:21.890 回答