我正在创建一个应用程序,该应用程序针对给定的搜索词或首字母缩写词搜索我的文本文件。这是我真正创建的第一个应用程序。文本文件的格式如下:acronym%term%definition。我有一个InputStream和一个BufferedReader逐行通过文件。然后我用百分号分割它,并使用我创建的Triple类将字符串放入三元组中,并将该Triple添加到ArrayList。我的下一个函数应该搜索包含搜索缩略词或术语的Triple的ArrayList。如果无法找到首字母缩写词,则会转到InvalidAcronym活动。如果它在那里,它将进入ValidAcronym活动。出于某种原因,唯一触发的活动是InvalidAcronym活动。我认为这与将行添加到ArrayList有关。我原本只是使用HashMaps的缩写和定义工作。有人可以帮我吗?这里是我的代码:在Android应用程序中搜索列表并显示答案
package com.redacted.laurenanderson.acronymlookup;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.util.Pair;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
public class Search extends AppCompatActivity{
public EditText mEdit;
public static String currAc;
// public static HashMap<String,String> acros = new HashMap<String,String>(){{
//add all currently known thingies.
//}};
public static ArrayList<Triple> acros2 = new ArrayList<Triple>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
InputStream is = this.getResources().openRawResource(R.raw.acronyms2);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String[] str;
//String FILENAME = "acronyms.txt";
String FILENAME = "acronyms2.txt";
try {
String s = reader.readLine();
while (s != null){
//str = s.split(" ",2);
//acros.put(str[0],str[1]);
//THIS IS GOING TO BE THE REPLACEMENT
str = s.split("%",3);
System.out.println(str.toString());
Triple<String,String,String> acro = new Triple<String,String,String>(str[0],str[1],str[2]);
acros2.add(acro);
s = reader.readLine();
}
}
catch(IOException e){
System.out.println("OH NO");
return;
}
mEdit = (EditText)findViewById(R.id.acroterm);
//FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.home);
//fab.setImageResource(R.drawable.ic_search);
ImageButton fab = (ImageButton) findViewById(R.id.search);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/* if(acros.containsKey(mEdit.getText().toString())){
currAc = mEdit.getText().toString();
Intent intent1 = new Intent(view.getContext(), ValidAcronym.class);
view.getContext().startActivity(intent1);
}
else{
Intent intent2 = new Intent(view.getContext(), InvalidAcronym.class);
view.getContext().startActivity(intent2);
}*/
for(Triple triple: acros2){
currAc = mEdit.getText().toString();
if(triple.contains(currAc)){
Intent intent1 = new Intent(view.getContext(), ValidAcronym.class);
view.getContext().startActivity(intent1);
}
}
Intent intent2 = new Intent(view.getContext(), InvalidAcronym.class);
view.getContext().startActivity(intent2);
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
/*public HashMap<String,String> getMap(){
return acros;
}*/
public ArrayList<Triple> getList(){return acros2;}
/*public static Pair<String,String> returnAcro(String s){
Pair<String,String> p = new Pair<String,String>(s,acros.get(s));
//Triple<String,String,String> p = new Triple<String,String,String>(s, triple.second(),triple.third());
return p;
}*/
public static Triple<String,String,String> returnAcro2(String s){
for(Triple triple : acros2){
if(triple.contains(s)){
return triple;
}
}
return null;
}}
只是一个想法,但如果声明我会把一回在于,在一个开始你的有效活动 –
不知何故,完全解决了这个问题。你应该把它作为答案,所以我可以给你信用! – CSRenA