2017-05-04 171 views
0

我有一个ArrayList包含从文本文件读入的字符串。我想这些字符串来填充微调,但我的代码不工作,它说“无法化解的构造”当我将鼠标悬停在该行:麻烦从ArrayList填充微调器

ArrayAdapter adp = new ArrayAdapter(this, android.R.layout.simple_spinner_item, devicesAL); 

这里是我的代码的其余部分,我提供了所有的这是因为我不知道原因在哪里。这个特定的位在第二个try块中。任何人都可以帮忙吗?

package com.example.iotdevicestatus; 


public class MainActivity extends AppCompatActivity { 

    String statusLink = "http://redacted.uk/pmt/status.txt"; 
    String deviceLink = "http://redacted.uk/pmt/devices.txt"; 
    String status = "status testttest"; 

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

          Spinner spinner = (Spinner) findViewById(R.id.spinner); 
          ArrayAdapter adp = new ArrayAdapter(this, android.R.layout.simple_spinner_item, devicesAL); 
          adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
          spinner.setAdapter(adp); 
         } 

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

          System.out.println("Status = " + status); 
          //al.add(line); - use in case of multiple statuses 

          TextView output = (TextView) findViewById(R.id.textView); 

          System.out.println(status); 

          output.setText(status); 
         } 


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


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

     thread.start(); 



    } 
} 
+0

看来你没有'ArrayAdapter'进口,或者你没有一些要求在'Gradle' – DarkCygnus

+0

无法解析构造“ArrayAdapter(匿名了java.lang.Runnable,INT,java.util.ArrayList中)' – JB2000

+0

看@ m0skit0回答 – DarkCygnus

回答

1

请注意,this里面的匿名类就是指那个匿名类。你想要的是MainActivity的实例,而不是Runnable的匿名子类。

ArrayAdapter adp = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, devicesAL); 

由于您的微调仍无法填充,可以

  1. 确保devicesAL填充
  2. 呼叫adp.notifyDataSetChanged()填充和设置适配器的微调后。
  3. Activity#runOnUiThread()内部运行与修改UI相关的所有内容。
+0

这个删除了错误,但破坏了程序并没有填充微调。 – JB2000

+0

@ JB2000这是一个不同的问题/问题。你的问题是关于构造函数错误,我回答。 – m0skit0

+0

我的问题并不是关于构造函数错误,我给出了这个错误来帮助别人找到我的问题。由于我无法填充我的微调,所以我开始时遇到了同样的问题。 – JB2000