【问题标题】:Error with internet connectivity for an android activityandroid 活动的互联网连接错误
【发布时间】:2013-07-26 14:26:53
【问题描述】:

大家好, 我正在创建一个 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 显示没有任何网页被获取或没有显示任何互联网连接活动的迹象。

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

我试过这样做

" 在 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 上运行它,应用程序运行但同样的问题仍然存在,手机未连接到网络,所以我认为应该显示“无互联网连接”消息,但是相反,它只显示文本字段的默认值。非常感谢任何帮助,因为我束手无策。

【问题讨论】:

  • 您的清单是否有:
  • 是的,我已经包含了所有必需的权限,我还编辑了问题。

标签: android


【解决方案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.");
                            }
                        }));

【讨论】:

  • 嗨菲尔,谢谢你的回答,我点击了链接,但是,我不熟悉 Jquery,我只在服务器端脚本上使用了 php,并认为我可以使用 android 的 HTTPURLCONNECTION 类提出一个简单的请求,但我会尝试使用您的代码,谢谢。
  • 你好菲尔,我刚刚将代码插入到 onCreate 方法中,并希望我可以按照 Eclipse 的建议自动导入所有必要的包,但显然它无法识别它们。但无论如何,谢谢。我将尝试寻找替代方案。
  • @user2587610 您需要将 jar 放在构建路径中。在 droidQuery 中,导航到 bin/droidquey.jar 将其添加到项目的 libs 目录(如有必要,请创建)。
【解决方案2】:

你写好权限清单了吗?

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

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

【讨论】:

  • 是的,我已在清单文件中包含所有必要的权限。我忘了在这里包含它,我将在稍后添加完整的清单文件。
猜你喜欢
  • 2013-07-17
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2018-01-21
  • 2020-11-29
  • 2014-07-21
  • 2015-01-02
  • 1970-01-01
相关资源
最近更新 更多