搜索json内容的功能

问题描述 投票:0回答:2

我开发了一个Android应用程序,其中所有内容都是从json获取的,这是使用asynctask完成并填充在listviews中。我在应用程序中有近10个自定义列表视图。现在我想在主页中实现单个搜索。我是android的新手。请建议我,如何实现它。仅对json对象中的标题节点进行搜索。我知道如何设置搜索小部件,listview xml,添加清单文件元数据以及搜索活动到主活动。我想知道,如何实现所有自定义列表视图的单一搜索。

我的json文件如下所示。自定义列表视图包含图像,标题和说明。

   [
     {
         "name":"Steve",
         "title":"How things work",
         "image":url,
     },
     {
         "name":"Jack",
         "date":"helium extraction",
         "image":url,
     }
   ]
android json search
2个回答
0
投票

1.首先,创建一个Object User例如:

public class User{
  String name;
  String title;
  String UrlImage;

  // setter
  // getter

}

2.然后创建一个ListAdapter extends BaseAdapter来填充ListView中的数据

(从AndroidHive看这个tutoruel)

另请参阅this tutorielTutoZone.info(法语),了解如何在custiom适配器中填充数据

3.对于搜索功能,创建一个包含EditText searchEditText的布局layout_search

4.在包含带有数据的listView的每个布局中包含此布局(来自Json)

5.在你的asynckTask中,将每个JsonObject添加到A ArrayList<User>,在解析结束时,你将拥有一个包含所有数据[User(name, title,url)]并填充在listView中的arrayList

6.回到搜索功能,在每个活动上为editText添加一个监听器:addTextChangedListener:

EditText fillSearch=(EditText)findViewById(R.id.searchEditText);

fillSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                 // TODO Auto-generated method stub
                String text = fillSearch.getText().toString().toLowerCase(Locale.getDefault());

              ArrayList<User> list =  search(text); // our function 
            }
        });

7.添加返回列表的搜索方法包含我们搜索的所有数据(以用户在EditText中输入的文本开头):

 public  ArrayList<User>search(String s)
{
     ArrayList<User> list= new ArrayList<User>();

         for (User u: listeUsers) {  // listUsers= contains all data parsed in asynckTask
             if(User.getTitle().toLowerCase().startsWith(s))
             {
                 list.add(u);
             }
           }
         return list;
}

0
投票

你可以做一件事来快速搜索,在arrayList中保存所需的数据,只需用“.contains”进行for循环运行

JSONObject jsonObjRecv = HttpClientJSON.SendHttpPost(Appconstants.BASE_URL + Appconstants.DATA, jobjsend);   

在使用之后,您将在jsonObjRecv中获得json响应:

title = jsonObjRecv.getString("title");                

现在用

 if(title.contains(//your search string)){//conditions and code }
© www.soinside.com 2019 - 2024. All rights reserved.