2016-12-16 2 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); 

Я не понимаю, почему, если я пишу: «Книгу»
Я вижу эти результаты: «Книга ... ',' Таблица ... ',' Телефон ... '.

Проблема заключается в том, что этот код работает только с параметрами [0] и может видеть только «the» или «the» и не может видеть «книгу».

+0

Мы не можем видеть то, что вы передаете в 'метод execute' в AsyncTask в. Если вы дадите '' Книгу '', то 'params' будет только длиной один –

+1

Кроме того, вы не хотите' i ++ 'в цикле. Этот wiil пропускает элементы внутри 'params'. Если вы будете 'Log' значение' a', вы увидите, что –

+0

Пожалуйста, покажите, как вы вызываете метод execute async-задачи. Если использование используется 'execute (« Книга »)', то нет, это только 'params [0]', и оно равно '' Книга '' –

ответ

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 ("Книга" .split ("")) ' –

+0

Исключение исключений из' params [i + 1] ', возможно –

+0

right @ cricket_007, Отредактировано условие. Спасибо – Charu

Смежные вопросы