【问题标题】:Async task and https android异步任务和 https android
【发布时间】:2013-08-19 23:18:01
【问题描述】:

我有一个 android 应用程序,并在我的网站上添加了 ssl 以在登录时保护登录信息。我有一个异步任务,它发送信息以检查数据库等。

设置我的 ssl correctley 并看到它在我的网站上运行后。我尝试在我的异步任务的 url 中将 http: 更改为 https: 并且它因以下错误而崩溃:

08-19 19:14:16.779    9314-9465/com.beerportfolio.beerportfoliopro E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:864)
        Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 50: https://myDBUrl
        at java.net.URI.create(URI.java:727)
        at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
        at com.example.beerportfoliopro.ReadLogInJSON.readJSONFeed(ReadLogInJSON.java:90)
        at com.example.beerportfoliopro.ReadLogInJSON.doInBackground(ReadLogInJSON.java:37)
        at com.example.beerportfoliopro.ReadLogInJSON.doInBackground(ReadLogInJSON.java:24)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        ... 5 more

更新:

发现错误不在 ssl 部分,但是当使用自动更正键盘在用户名末尾添加一个空格时,它会崩溃。如果输入,如何消除这个空格?

【问题讨论】:

  • 仔细查看后我认为错误是我输入的用户名中的意外空格现在仔细检查
  • 您可以对 URL 进行编码(我认为这会将“”替换为 %20)。
  • 通常,您应该在发送和 urlencoding 之前修剪数据。这将避免这些问题。

标签: android ssl android-asynctask


【解决方案1】:

您可以随时编写一个 util 函数并使用它来避免此类错误:

private String urlEncode(String url)
    {
        if(url == null)
            return null;
        url = url.replace("[","");
        url = url.replace("]","");
        url = url.replaceAll(" ","%20");
        return url;
    }

【讨论】:

  • Uri.encode(String) 会做同样的事情。除此之外,它将对除字母、数字和非保留字符以外的所有字符进行编码。
  • @vikram.. 建议将其作为 Util 函数的目的是,我们可以根据需要控制如何对 url 进行编码。不过你是对的。
  • 对不起,我不同意。查看抛出的异常:Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 50: https://myDBUrl at java.net.URI.create。这里的问题与我们的需要或偏好无关。我们需要遵守java.net.URI's 规范。您的 util 方法(在更多的url.replace(...) 语句之后)看起来类似于Uri.encode(String)。所以,你的建议是正确的。
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2021-07-05
  • 2016-11-23
  • 2013-11-14
相关资源
最近更新 更多