Spinners - 从数组中选择项目

时间:2017-05-07 00:44:24

标签: java android

我有一个微调器,它从存储在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();
    }
}

1 个答案:

答案 0 :(得分: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) {

    }
});