改进Android应用程序中的搜索功能?

时间:2016-06-30 13:20:46

标签: php android

我已在我的应用程序中实现了搜索功能,但搜索不够清晰。

这意味着如果用户搜索其他用户,他需要例如输入完整的名字,但在某些情况下,字符在名字中间是外语,就像这个Du*š*an一样,它会显示键入该字符后的数据,但如果大小写为John,则需要键入John以获取某些结果。

我想在输入两个或三个字符后显示数据,并且我想在没有找到结果时清除列表。

还有一件事需要提及,我正在使用EditText小部件进行搜索。

这是我的代码在java中的外观:

@Override
public void afterTextChanged(Editable s) {
    if (!s.toString().isEmpty()) {
        doSearch(s.toString());
    } else {
        // Probably here i need to clear list
        mAdapter.notifyDataSetChanged();
    }
}

现在这里是解析网络响应的方法:

private void doSearch(String query) {
    // showLoadingDialog();

    Map<String, String> params = new HashMap<>();
    params.put("searchQuery", query);

    mNetworkManager.sendPostRueqestWithoutAuthentication(
            "http://192.168.42.6:8081/timster/include/Search.php",
            volleySuccessListener,
            volleyErrorListener,
            params);
}

这就是我从DB获得JSON响应的方式:

private VolleyListenerSuccess volleySuccessListener = new VolleyListenerSuccess() {
    @Override
    public void getResult(String response) {
        // dialog.dismiss();
        mUsers = new ArrayList<>();

        if (response.equalsIgnoreCase("no rows")) {
            // TODO change recycler view state
            // Here i should clear list too
            mUsers.clear();
            mAdapter.notifyDataSetChanged();
        } else {
            try {
                JSONArray array = new JSONArray(response);

                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    User user         = new User();
                    user.setName(object.getString("name"));
                    user.setImage(object.getString("image"));
                    mUsers.add(user);
                }

                mAdapter = new UserListAdapterV3(activity, mUsers);
                mRecyclerView.setAdapter(mAdapter);
                mRecyclerView.setLayoutManager(new LinearLayoutManager(activity));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
};

我也应该在这里改变一下吗? 这是服务器端代码(PHP):

    <?php
if(isset($_POST['searchQuery']))
{
  require_once('ConfigV2.php');
  $search_query=$_POST['searchQuery'];
  $sql = 'SELECT * FROM users WHERE MATCH(name) AGAINST(:search_query)';
  $statement = $connection->prepare($sql);
  $statement->bindParam(':search_query', $search_query, PDO::PARAM_STR);
  $statement->execute();
  if($statement->rowCount())
  {
      $row_all = $statement->fetchall(PDO::FETCH_ASSOC);
      header('Content-type: application/json');
      echo json_encode($row_all);

 }  
 elseif(!$statement->rowCount())
 {
     echo "no rows";
}
}

?>

1 个答案:

答案 0 :(得分:0)

如果在找不到结果时需要清除列表。您需要在PHP端更改代码。

echo "no rows";

echo json_encode([]);
  

如果要在MySQL中使用全文搜索,则需要对列name使用FULLTEXT索引