2017-05-07 14 views
0

Webサーバーに保存されたテキストファイルから読み込まれるスピナーがあります。このテキストファイルの内容は、ArrayListに格納されます。私のアプリは、ユーザーが自分自身の名前をつけてスピナーを更新するアイテムをこのテキストファイルに追加させることになります。私ができることが必要なのは、アイテムが選択されたときにスピナーに何かをさせることです。ユーザーが追加したアイテムに任意の名前を付けることができるので、名前を知っていない場合、その特定のアイテムがスピナーから選択されたときに、アプリは何かできますか?スピナー - 配列から選択された項目を取得する

私は自分のアプリを設定していますので、スピナー項目が "文字列"の場合はこれを行います...しかし、ユーザーが項目自体に名前を付けた場合、これは明らかに機能しません。私は私の質問を説明したことを願っています。あなたがしたいと言うので

public class MainActivity extends AppCompatActivity { 

    String statusLink = "http://redacted.uk/pmt/status.txt"; 
    String deviceLink = "http://redacted.uk/pmt/devices.txt"; 
    String status; 
    final String degree = "\u00b0"; 

    ArrayList<String> devicesAL = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Thread thread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        // Set up connection to device.txt on web server 
        URL deviceUrl = new URL (deviceLink); 
        URLConnection deviceConn = deviceUrl.openConnection(); 
        deviceConn.setDoOutput(true); 
        deviceConn.connect(); 

        InputStream dis = deviceConn.getInputStream(); 
        InputStreamReader disr = new InputStreamReader(dis, "UTF-8"); 
        BufferedReader dbr = new BufferedReader(disr); 

        String deviceLine; 

        // Set up connection to status.txt on web server 
        URL statusUrl = new URL(statusLink); 
        URLConnection statusConn = statusUrl.openConnection(); 
        statusConn.setDoOutput(true); 
        statusConn.connect(); 

        InputStream sis = statusConn.getInputStream(); 
        InputStreamReader sisr = new InputStreamReader(sis, "UTF-8"); 
        BufferedReader sbr = new BufferedReader(sisr); 

        String statusLine; 

        try { 
         while ((deviceLine = dbr.readLine()) != null) { 
          //System.out.println(deviceLine); 
          devicesAL.add(deviceLine); 

          for (String str : devicesAL) { 
           System.out.println(str); 
          } 
         } 

         while ((statusLine = sbr.readLine()) != null) { 
          System.out.println(statusLine); 
          status = statusLine; 

          System.out.println("Status = " + status); 
          TextView output = (TextView) findViewById(R.id.textView); 
          System.out.println(status); 
         } 

         for (String str : devicesAL) { 
          System.out.println(str); 
         } 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           //LOAD SPINNER 
           Spinner spinner = (Spinner) findViewById(R.id.spinner); 
           ArrayAdapter adp = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, devicesAL); 
           adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
           spinner.setAdapter(adp); 
           adp.notifyDataSetChanged(); 
           spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

            @Override 
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
             TextView output = (TextView) findViewById(R.id.textView); 

             if (parent.getItemAtPosition(position).equals("Water Cooler")) { 
              System.out.println("Water cooler selected"); 
              output.setText(status); 
             } 
            } 

            @Override 
            public void onNothingSelected(AdapterView<?> parent) { 

            } 
           }); 
          } 
         }); 
        } finally { 
         sbr.close(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

     thread.start(); 
    } 
} 
+0

'onItemSelected()'の中で何をしたいのかを教えてください。あなたはどうですか? – zihadrizkyef

+0

ユーザーが項目を追加すると、独自のテキストファイルが作成されます。彼らが「冷蔵庫」という項目を呼び出した場合、fridge.txtが生成され、「冷蔵庫」がスピナーに追加されます。その後、ユーザーがスピナーから「冷蔵庫」を選択すると、fridge.txt内のデータが表示されます。 onItemSelected()では、ユーザーがテキストファイルの名前を指定したので、テキストファイルの名前を指定する方法がわかりません。 – jb2002

答えて

0

:これは、これまでの私のコードであるユーザーが、スピナーから「冷蔵庫」を選択

場合は、fridge.txt内のデータが表示されます

だから、私はスピナーからファイル名を取得してコンテンツを表示できると思います。これは次のようになります:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String selectedFileName = parent.getItemAtPosition(position); 
     File sdcard = Environment.getExternalStorageDirectory(); 
     File file = new File(sdcard, selectedFileName+".txt"); 

     //Read text from file 
     StringBuilder text = new StringBuilder(); 
     try { 
      BufferedReader br = new BufferedReader(new FileReader(file)); 
      String line; 
      while ((line = br.readLine()) != null) { 
       text.append(line); 
       text.append('\n'); 
      } 
      br.close(); 
     } 
     catch (IOException e) {} 

     TextView tvText = (TextView)findViewById(R.id.tvText); 
     tvText.setText(text.toString()); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 
}); 
関連する問題