2016-11-22 15 views
0

У меня есть следующий ответ json с некоторыми книгами.Retrofit2 с параметром запроса, который не работает

[ 
{ 
"title" : "Clean Code", 
"author" : "Robert Martin", 
"bookUrl" : "http://amzn.to/1DJybxH", 
"imageUrl" : "http://adavis.github.io/adept-android/images/clean_code.jpg", 
"displayDate" : "August 11, 2008", 
"numberOfPages" : 464 
}, 

{ 
"title" : "Effective Java", 
"author" : "Joshua Bloch", 
"bookUrl" : "http://amzn.to/1Ku8Xel", 
"imageUrl" : "http://adavis.github.io/adept- 
android/images/effective_java.jpg", 
"displayDate" : "May 28, 2008", 
"numberOfPages" : 346 
}, 

{ 
"title" : "Working Effectively with Legacy Code", 
"author" : "Michael Feathers", 
"bookUrl" : "http://amzn.to/1Jqe1PA", 
"imageUrl" : "http://adavis.github.io/adept-android/images/legacy_code.jpg", 
"displayDate" : "October 2, 2004", 
"numberOfPages" : 456 
}, 

{ 
"title" : "Refactoring: Improving the Design of Existing Code", 
"author" : "Martin Fowler", 
"bookUrl" : "http://amzn.to/1Lx4cjR", 
"imageUrl" : "http://adavis.github.io/adept-android/images/refactoring.jpg", 
"displayDate" : "July 8, 1999", 
"numberOfPages" : 464 
}, 

{ 
"title" : "Test Driven Development: By Example", 
"author" : "Kent Beck", 
"imageUrl" : "http://adavis.github.io/adept-android/images/tdd.jpg", 
"displayDate" : "November 18, 2002", 
"numberOfPages" : 240 
} 
] 

Теперь я хочу performe запрос Seach и отобразить только те объекты, название которых содержит слово код, т.е. эффективно работать с унаследованным кодом и так один. Так вот что я делаю.

public interface BookService { 

    @GET("photos/sample_data") 
    Call<List<Book>> getBooks(); 

    @GET("photos/sample_data") 
    Call<List<Book>> search(@Query("q") String query); 

}

Первый запрос @GET считывает все данные JSON. Так что часть часть работает. Теперь второй запрос @GET относится к моему методу поиска. И, как видите, в нем содержится параметр запроса.

Далее я вызываю метод enqueue (...) в моем классе Presesenter (я использую MVP). Таким образом,

public class BooksPresenter { 
private final BooksContract.View booksView; 
private final BookService service; 

public BooksPresenter(BooksContract.View booksView,BookService service){ 
    this.booksView = booksView; 
    this.service = service; 
} 

public void initDataSet(){ 
    service.search("Code").enqueue(new Callback<List<Book>>() { 
     @Override 
     public void onResponse(Call<List<Book>> call, Response<List<Book>> response) { 
      if(response.isSuccessful()){ 
       booksView.showBooks(response.body()); 
       Timber.i("Books data was loaded from API."); 

      } 
     } 

     @Override 
     public void onFailure(Call<List<Book>> call, Throwable t) { 
      booksView.showErrorMessage(); 
      Timber.e(t, "Unable to load the books data from API."); 
     } 
    }); 
    } 
} 

В этой строке выполняется поиск кода слова.

service.search("Code")... 

Однако я все еще получаю целые книги, и запрос не работает. :(. Любые идеи?

Мой весь URL является

http://www.theo-android.co.uk/photos/sample_data 

и я объявляю первый бит его в отдельный класс.

public class Constants { 
    public static final String BASE_URL = "http://www.theo-android.co.uk/"; 
} 

Спасибо,

Тео.

ОБНОВЛЕНИЕ

Я решил создать базу данных и добавить данные статически! Затем я написал сценарий php для создания json.

<?php 
include("init.php"); 
$string=""; 
$newString=""; 
$get_posts = "select * from books_table"; 

$run_posts = mysqli_query($con,$get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)){ 


       $row_array['title'] = $posts_row['title']; 
       $row_array['author'] = $posts_row['author']; 
       $row_array['bookUrl'] = $posts_row['bookUrl']; 
       $row_array['imageUrl'] = $posts_row['imageUrl']; 
       $row_array['displayDate'] = $posts_row['displayDate']; 
       $row_array['numberOfPages'] = $posts_row['numberOfPages']; 

       array_push($posts_array,$row_array); 

} 

    $string = json_encode($posts_array,JSON_UNESCAPED_UNICODE); 

    echo $string; 
?> 

Я изменил URL для

http://www.theo-android.co.uk/books/sample_data.php 

Я получаю JSON назад, как показано на самого начало. Но с этим адресом

www.theo-android.co.uk/books/sample_data.php/q=clean 

по-прежнему имеет ту же проблему. Поэтому я решил проверить свой сценарий и добавил, где предложение.

<?php 
include("init.php"); 
$string=""; 
$newString=""; 
$get_posts = "select * from books_table where title='Clean Code' "; 

$run_posts = mysqli_query($con,$get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)){ 


       $row_array['title'] = $posts_row['title']; 
       $row_array['author'] = $posts_row['author']; 
       $row_array['bookUrl'] = $posts_row['bookUrl']; 
       $row_array['imageUrl'] = $posts_row['imageUrl']; 
       $row_array['displayDate'] = $posts_row['displayDate']; 
       $row_array['numberOfPages'] = $posts_row['numberOfPages']; 

       array_push($posts_array,$row_array); 

    } 

    $string = json_encode($posts_array,JSON_UNESCAPED_UNICODE); 

    echo $string; 
?> 

и угадайте, что. Я все еще получаю весь ответ json !!!

+0

из из-за любопытства, почему вы назвали «фото» конечной точки, когда она возвращает книги? Я попытался запросить конечную точку из браузера, и я получаю те же результаты. Либо вы запрашиваете неверную конечную точку, либо ваш бэкэнд не работает – Blackbelt

+0

@Blackbelt Это была старая папка на моем сервере. Я изменю его. Но этот urol theo-android.co.uk/photos/sample_data/q=code все еще показывает весь json. – Theo

+0

проблема - задняя сторона. Это не обновление – Blackbelt

ответ

0

Можете ли вы попробовать этот код для запроса в initDataSet.

List<Book> bookList = service.search("Code"); 

Возможно, этот код может вам помочь.

1

попробовать это

@GET("books/sample/") 
    Call<List<Book>> search(@Query("q") String query); 

вместо этого

@GET("photos/sample_data") 
    Call<List<Book>> search(@Query("q") String query); 

Примечания: -вы упоминают этот URL в комментарии Вам различно использование в методе @Get ... http://www.theo-android.co.uk/books/sample/q=code

+0

Я уже пробовал это, но не работает. Я все еще получаю весь объект json назад :( – Theo

+0

ваш выше ULR также остановлен ..... проблема с сервером ..... – sushildlh

+0

Что значит остановлено? – Theo

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