2016-12-16 102 views
0

这是我的代码:看不到正确的结果在搜索查询

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

我不明白为什么,如果我写:“书”
我看到这些的结果:“这本书...','桌子...','电话...'。

问题似乎是这个代码只能与params [0]一起使用,并且只能看到'the'或'the'而看不到'book'。

+0

我们不能看到你传递什么到的AsyncTask的'execute'方法。如果你给''The book“',那么'params'的长度只有一个 –

+1

另外,你不希望在循环中有'i ++'。这将跳过'params'中的元素。如果你想记录'a'的值,你会看到 –

+0

请显示你如何调用异步任务的execute方法。如果使用'execute(“该书”)',那么不,它只是'params [0]',它等于''The book'' –

回答

2

首先,有更多的字符不是空格,你需要URL编码。

虽然我不认为你需要循环任何东西。 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 
0

为cricket_007评论,试试这个代码:

@Override 
protected String doInBackground(String... params) { 
try { 
    String a = ""; 
    if(params != null && params.length > 0){ 
     for(int i = 0; i < params.length; i++) { 
      a += params[i]; 
      if(params.length > i+1){ 
      a += "%20"; 
     } 
    } 
} 

    url = new URL("mysite/search.php?q="+a); 
+1

你可以用'execute(“the”,“book )''或'execute(“The book”.split(“”))' –

+0

'params [i + 1]'出界异常,可能是 –

+0

right @ cricket_007,编辑条件。谢谢 – Charu