2017-05-07 39 views
0

我有一个微调器可以从存储在Web服务器上的文本文件中获取。然后将此文本文件的内容存储在ArrayList中。我的应用程序将让用户添加一个项目到这个文本文件,他们自己命名并更新微调器。我需要做的是在选择某个项目时,微调器会执行某些操作。由于用户可以给他们添加的项目指定任何名称,如果我的应用程序不知道他们命名了什么,那么在从微调控件中选择特定项目时该如何执行某些操作?Spinners - 获取从数组中选择的项目

现在我有我的应用程序设置,以便如果微调项目等于“字符串”做到这一点......但这显然不会工作,如果用户已命名一个项目本身。我希望我已经解释了我的问题了!这是到目前为止我的代码:

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) { 

    } 
});