【发布时间】:2022-08-23 11:59:14
【问题描述】:
我需要帮助来弄清楚如何通过放置在 assets 文件夹中的 JSON 文件过滤搜索结果,并将其显示在 RecyclerView 中。 我以前通过使用上传到 Firebase 的 JSON 成功实现了它,但是由于我将它移到了本地资产中,所以我迷路了。我知道我应该使用其他一些过滤类,但任何尝试似乎都失败了。 到目前为止,这是我的代码:
适配器
public class AdapterJSON extends RecyclerView.Adapter<AdapterJSON.MyViewHolderJSON> {
Context contextJSON;
ArrayList<String> lang1;
ArrayList<String> lang2;
public AdapterJSON(Context contextJSON, ArrayList<String> lang1, ArrayList<String> lang2) {
this.contextJSON = contextJSON;
this.lang1 = lang1;
this.lang2 = lang2;
}
@NonNull
@Override
public MyViewHolderJSON onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View vJSON = LayoutInflater.from(contextJSON).inflate(R.layout.sections_row, parent, false);
return new MyViewHolderJSON(vJSON);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolderJSON holder, int position) {
holder.italian.setText(lang1.get(position));
holder.indonesian.setText(lang2.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(contextJSON, \"Yo\", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return lang1.size();
}
public class MyViewHolderJSON extends RecyclerView.ViewHolder {
TextView italian, indonesian;
public MyViewHolderJSON(@NonNull View itemView) {
super(itemView);
italian = itemView.findViewById(R.id.tvfirstName);
indonesian = itemView.findViewById(R.id.tvlastName);
}
}
}
搜索活动类
public class SearchActivityJSON extends AppCompatActivity {
RecyclerView recyclerView;
AdapterJSON mainAdapter;
Button button_logout;
ArrayList<String> lang1 = new ArrayList<>();
ArrayList<String> lang2 = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_search);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Objects.requireNonNull(getSupportActionBar()).setTitle(\"\");
recyclerView = findViewById(R.id.recyclerviewId);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
button_logout = findViewById(R.id.button_logout);
button_logout.setOnClickListener(view -> {
Intent intent = new Intent(SearchActivityJSON.this, HomeActivity.class);
startActivity(intent);
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_item, menu);
MenuItem item = menu.findItem(R.id.searchId);
SearchView searchView = (SearchView) item.getActionView();
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String newText) {
mysearch(newText);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mysearch(newText);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
private void mysearch(String newText) {
String jsonString = loadJSONfromAssets();
if (newText.isEmpty()) {
Toast.makeText(this, \"There is nothing\", Toast.LENGTH_SHORT).show();
} else {
try {
assert jsonString != null;
JSONObject json = new JSONObject(jsonString);
JSONArray m_Array = json.getJSONArray(\"CommonWords\");
for (int i = 0; i < m_Array.length(); i++) {
JSONObject inside = m_Array.getJSONObject(i);
lang1.add(inside.getString(\"italian\"));
lang2.add(inside.getString(\"indonesian\"));
}
} catch (JSONException e) {
e.printStackTrace();
}
mainAdapter = new AdapterJSON(this, lang1, lang2);
recyclerView.setAdapter(mainAdapter);
Toast.makeText(this, \"There is something\", Toast.LENGTH_SHORT).show();
}
}
private String loadJSONfromAssets() {
String json;
try {
InputStream is = getAssets().open(\"assetPhrasebook.json\");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String (buffer, StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return json;
}
}
文件
{
\"Kosong\": [
{
\"italian\": \"\",
\"indonesian\": \"\",
}
],
\"CommonWords\": [
{
\"italian\": \"Si\",
\"indonesian\": \"Ya\",
},
{
\"italian\": \"No\",
\"indonesian\": \"Tidak\",
},
{
\"italian\": \"Forse\",
\"indonesian\": \"Mungkin\",
},
{
\"italian\": \"Grazie\",
\"indonesian\": \"Terima kasih\",
},
{
\"italian\": \"Prego\",
\"indonesian\": \"Sama sama\",
}
]
}
感谢任何可以帮助我的人。
标签: android json android-recyclerview assets searchview