PCスペック
Windows7 64bit
メモリ 8GB
プロセッサ Intel Core i7-3610
Android Studio 3.4
android studioで
1.CSVファイルを読み込んでおく
2.画面右上で条件を選択
3.ExitTextで文字を入力して検索ボタンをクリック
4.入力された文字がCSVファイルの中にあれば、「その文字」&「同じ行の違う列の対応する情報」をTextViewで出力
上のような機能を実装したいです。
3までは一応実装済みです。
写真はとりあえず、中身をすべて表示しているだけです。
![
具体的には、
ほしい情報として画面右上の選択で「気温」を選択しているときに、「1時」と入力すると、「1時」&「21度」がTextViewで出力されるみたいな感じです。
現時点でのソースコードはこんな感じです。
java
1package com.example.csvread3; 2 3import android.support.v7.app.AppCompatActivity; 4import android.os.Bundle; 5import android.view.View; 6import android.widget.AdapterView; 7import android.widget.ArrayAdapter; 8import android.widget.Button; 9import android.widget.EditText; 10import android.widget.ListView; 11import android.widget.Spinner; 12import android.widget.TextView; 13 14import java.io.BufferedReader; 15import java.io.IOException; 16import java.io.InputStream; 17import java.io.InputStreamReader; 18import java.util.ArrayList; 19import java.util.Iterator; 20import java.util.List; 21import java.util.StringTokenizer; 22 23 24public class MainActivity extends AppCompatActivity { 25 26 //リストの宣言 27 private ArrayList<String> timeList; 28 private ArrayList<String> tempList; 29 private ArrayList<String> amountList; 30 31 //アダプターの宣言 32 private ArrayAdapter arrayAdapter; 33 private ArrayAdapter arrayAdapter2; 34 private ArrayAdapter arrayAdapter3; 35 36 private TextView textView;//適合した際に文章を表示 37 private EditText editText;//時刻を入力 38 String text;//入力内容 39 String item;//気温or電車の本数 40 41 42 private String spinnerItems[] = {"選択", "気温", "電車"};//スピナー 43 //private TextView SpinnertextView;//現在のスピナーで選んでるやつの表示用 44 45 @Override 46 protected void onCreate(Bundle savedInstanceState) { 47 super.onCreate(savedInstanceState); 48 setContentView(R.layout.activity_main); 49 50 //フレームワーク作成 51 timeList = new ArrayList<String>(); 52 tempList = new ArrayList<String>(); 53 amountList = new ArrayList<String>(); 54 55 //CSVを読み込んでおく 56 readCSV(); 57 58 //アプリにCSVの中身を表示するためのインスタンスを作成 59 ListView listView = (ListView) findViewById(R.id.list_view1); 60 ListView listView2 = (ListView) findViewById(R.id.list_view2); 61 ListView listView3 = (ListView) findViewById(R.id.list_view3); 62 63 //時刻の情報 64 arrayAdapter = 65 new ArrayAdapter( 66 this, R.layout.list_item_layout , timeList); 67 //気温の情報 68 arrayAdapter2 = 69 new ArrayAdapter( 70 this, R.layout.list_item_layout , tempList); 71 //電車の本数 72 arrayAdapter3 = 73 new ArrayAdapter( 74 this, R.layout.list_item_layout , amountList); 75 76 //画面内に表示 77 listView.setAdapter(arrayAdapter); 78 listView2.setAdapter(arrayAdapter2); 79 listView3.setAdapter(arrayAdapter3); 80 81 //文字を入力 82 editText = findViewById(R.id.edit_text); 83 //入力した文字を表示する為の準備 84 textView = findViewById(R.id.text_view); 85 //ボタンの作成 86 Button button = findViewById(R.id.button); 87 88 //検索条件(気温or電車の本数)を選択 89 //SpinnertextView = findViewById(R.id.spinner_text_view); 90 Spinner spinner = findViewById(R.id.spinner); 91 92 // ArrayAdapter 93 ArrayAdapter<String> adapter 94 = new ArrayAdapter<>(this, 95 android.R.layout.simple_spinner_item, spinnerItems); 96 97 //ユーザーが選択しようとするときにドロップダウンによりリストを表示するのに使うレイアウトを指定 98 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 99 100 // spinner に adapter をセット 101 spinner.setAdapter(adapter); 102 103 // リスナーを登録 104 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 105 // アイテムが選択された時 106 @Override 107 public void onItemSelected(AdapterView<?> parent, 108 View view, int position, long id) { 109 Spinner spinner = (Spinner)parent; 110 item = (String)spinner.getSelectedItem(); 111 //SpinnertextView.setText(item); 112 113 114 } 115 // アイテムが選択されなかった 116 public void onNothingSelected(AdapterView<?> parent) { 117 // 118 } 119 }); 120 121 122 //検索ボタンが押されたら 123 button.setOnClickListener(new View.OnClickListener() { 124 @Override 125 public void onClick(View v) { 126 // エディットテキストの文字を取得 127 text = editText.getText().toString(); 128 //入力された時刻と適合する時刻を探すメソッド 129 match(text); 130 131 } 132 }); 133 } 134 135 /** 136 * CSVの読み込み 137 */ 138 public void readCSV() { 139 try { 140 InputStream inputStream = 141 getResources().getAssets().open("data1.csv"); 142 143 InputStreamReader inputStreamReader = 144 new InputStreamReader(inputStream); 145 146 BufferedReader bufferReader = 147 new BufferedReader(inputStreamReader); 148 149 String line = ""; 150 151 while ((line = bufferReader.readLine()) != null) { 152 StringTokenizer stringTokenizer = 153 new StringTokenizer(line, ","); 154 155 timeList.add(stringTokenizer.nextToken()); 156 tempList.add(stringTokenizer.nextToken()); 157 amountList.add(stringTokenizer.nextToken()); 158 } 159 bufferReader.close(); 160 } catch (IOException e) { 161 e.printStackTrace(); 162 } 163 } 164 165 //入力された文字(時刻)と適合する時刻を探すメソッド 166 public void match(String text){ 167 //時刻の情報を1番目から最後まで回す 168 for(String s : timeList){ 169 //入力情報と一致したら 170 if(text == s){ 171 if(item == spinnerItems[1]){//スピナーで選択した条件が「気温」だったら 172 textView.setText(text+"の"+spinnerItems[1]+"は○○です"); 173 }else if(item == spinnerItems[2]){//条件が「電車の本数」だったら 174 textView.setText(text+"の"+spinnerItems[2]+"は○○です"); 175 } 176 } 177 } 178 } 179}
現在のところ、edittextから受け取った文字をmatchメソッドにわたして、matchメソッドの中で、CSVファイルの時刻情報だけをfor文で回したときに、入力情報と一致すれば画面に、気温or電車の本数の情報をとりあえず表示させたいのですが、アルゴリズムがおかしいせいか「1時」と入力しても画面上に何も表示されません。。。
間違っている箇所がありましたら教えていただけませんでしょうか?
回答1件
あなたの回答
tips
プレビュー