无法在搜索查询中看到正确的结果

时间:2016-12-16 17:27:32

标签: android

这是我的代码:

@Override
protected String doInBackground(String... params) {
    try {
        String a = "";
        for(int i = 0; i < params.length; i++) {
            a += params[i];
            if(params[i++] != null){
                a += "%20";
           }
        }
        url = new URL("mysite/search.php?q="+a);

我不明白为什么如果我写:&#39;这本书&#39;
我看到了这些结果:&#39;这本书......&#39; ,&#39;表...&#39;,&#39;手机......&#39;。

问题似乎是这个代码只适用于params [0],并且只能看到&#39;&#39;或者&#39;&#39;并且无法预览&#39;。

2 个答案:

答案 0 :(得分:2)

首先,您需要url-encode的字符多于空格。

但是,我认为你不需要循环任何东西。 Java有可以做到这一点的类。

String searchFor = URLEncoder.encode("the book", "utf-8"); // "the+book"

注意:取决于您的搜索引擎,但+%20的处理方式应相同。

因此,假设您使用的是task.execute("the book"),那么只需执行

@Override
protected String doInBackground(String... params) {
    String a = URLEncoder.encode(params[0], "utf-8");
    url = new URL("mysite/search.php?q="+a);

尽管如此,我更喜欢这种方式来构建url字符串。

String searchFor = URLEncoder.encode(params[0], "utf-8");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
    .authority("mysite")
    .appendPath("search.php")
    .appendQueryParameter("q", searchFor);
url = new URL(builder.build().toString());

如果您认为编码+会使某些内容搞砸,请参阅此

URLEncoder.encode("the+book", "utf-8"); // the%2Bbook

答案 1 :(得分:0)

作为cricket_007评论,试试这段代码:

{{1}}