Я создаю приложение, которое отправляет и получает данные из базы данных. У меня есть вид переработчика со списком событий, которые я хочу отфильтровать.
Я создал условие WHERE в строке с этим кодом:
, где s1, s2 ecc ... являются единичным условием для каждого фильтра.
String query = "(" + s1 + " AND " + s2 + " AND " + /*c5 + " AND " + */ s3 + " AND " + s4 + " AND " + s5 + " AND " + s6 + " AND " + s7 + ")";
например:
if (data_da.getText().toString().isEmpty()){
c1 = "(data between '1900/01/01' AND ";
}else{
String anno = data_da.getText().toString().substring(6);
String mese = data_da.getText().toString().substring(3, 5);
String giorno = data_da.getText().toString().substring(0, 2);
//23/12/1222
//2030/08/23
c1 = "(data between '" + anno + "/" + mese + "/" + giorno + "' AND ";
}
if (data_a.getText().toString().isEmpty()){
c2 = "'9999/12/31' )";
} else {
String anno = data_a.getText().toString().substring(6);
String mese = data_a.getText().toString().substring(3, 5);
String giorno = data_a.getText().toString().substring(0, 2);
c2 = "'" + anno + "/" + mese + "/" + giorno + "' )";
}
String s1= c1 + c2;
Теперь я хочу передать это условие php для получения отфильтрованного списка событий.
Я пытался с этим phpкод:
<?php
//build query
$sql = "SELECT * FROM events";
//Add attivazione filter
if (isset($_GET['filtri']))
$category = $_GET['filtri'];
else if (isset($_POST['filtri']))
$category = $_POST['filtri'];
if (isset($category)) {
$filter[] = " '$category' ";
}
// end of category filter
// create additional filters here
if (!empty($filter)) {
$sql .= ' WHERE ' . implode(' AND ', $filter);
}
//Determine sort order
if (isset($_GET['orderby']))
$orderby = $_GET['orderby'];
else if (isset($_POST['orderby']))
$orderby = $_POST['orderby'];
//default sort order to itemName column
if (isset($orderby)) {
$sql .= " ORDER BY " . $orderby;
} else {
$sql .= " ORDER BY nomeEvento";
}
require_once('conn.php');
$rsItems = mysqli_query($connection, $sql) or
die(mysqli_error($connection));
?>
и с помощью этого json, чтобы получить ответ:
<?php
require_once('../database/queryDinamic.php');
//Build array of data items
$arRows = array();
while ($row_rsItems = mysqli_fetch_assoc($rsItems)) {
array_push($arRows, $row_rsItems);
}
//Serialize and deliver as JSON
header('Content-type: application/json');
echo json_encode($arRows);
?>
и вот как я делаю вызов дооснащения:
в интерфейсе, который я пыталсяи этот метод:
String FEED19 = "json/queryDinamicFeed.php";
@GET (FEED19)
Call<Evento[]> queryDinamic(@Query("filtri") String filt);
@FormUrlEncoded
@POST(FEED19)
Call<Evento[]> queryDinamic2 (@Field("filtri") String filt);
и в деятельности, которая должна получить данные:
String query = "(" + s1 + " AND " + s2 + " AND " + /*c5 + " AND " + */ s3 + " AND " + s4 + " AND " + s5 + " AND " + s6 + " AND " + s7 + ")";
MyWebService webService = MyWebService.retrofit.create(MyWebService.class);
Call<Evento[]> queryFiltri = webService.queryDinamic(query);
queryFiltri.enqueue(new Callback<Evento[]>() {
@Override
public void onResponse(Call<Evento[]> call, Response<Evento[]> response) {
if(!response.isSuccessful()){
Toast.makeText(Lista_Catalogo.this, "Code:" + response.code(), Toast.LENGTH_SHORT).show();
return;
}
Evento[] DatiEventi = response.body();
List<Evento> filtri;
filtri = Arrays.asList(DatiEventi);
ladapter = new Lista_Catalogo_Adapter(getApplicationContext(), filtri, dataCittaList, dataTypeList,updateStato());
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.ListEventi);
recyclerView.setAdapter(ladapter);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
@Override
public void onFailure(Call<Evento[]> call, Throwable t) {
}
});
Я пробовал другие вещи, но результаты либо:
- ничего не происходит;
- очередь не входит в обратный вызов;
- ошибка 404;
- и другие ошибки, которые я не помню.
Может кто-нибудь помочь мне, пожалуйста? Большое спасибо.