0

SQLServer 2008 からの文字列値の配列をスピナーに設定する Android アプリケーションを作成しています。メイン スレッドとは異なるスレッドからスピナーに設定できないという問題があります。

       Thread waitth = new Thread() {
         public void run() {
             try {
                    System.out.println("3");

                 String details="mani";
                        System.out.println("4");
                        URLConnection con = getServletConnection();
                        System.out.println("5");
                        ObjectOutputStream oos = new ObjectOutputStream(con.getOutputStream());
                        System.out.println("7");
                        oos.writeObject(details);
                        System.out.println("8");
                        oos.flush();
                        oos.close();
                        // receive result from servlet
                        InputStream inputStream = con.getInputStream();
                        ObjectInputStream inputFromServlet = new ObjectInputStream(
                                inputStream);
                        result = (String[]) inputFromServlet.readObject();
                        //System.out.println(result);
                        inputFromServlet.close();
                        inputStream.close();
                        System.out.println();
                        System.out.println("got it");

                    System.out.println("450200");


                    ArrayList<String> aus=new ArrayList<String>();
                    for(int i=0;i<result.length;i++)
                    aus.add(result[i]);
                 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, aus);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                   s1=(Spinner)findViewById(R.id.spinner1);

                        s1.setAdapter(adapter);




             }  
            catch (Exception ex) {
              ex.printStackTrace();
            }
         }
            };
            waitth.start();


    }


    private URLConnection getServletConnection() throws MalformedURLException,
       IOException {
    URL urlServlet = new URL("http://ipaddress/spinnerfordata");//servlet
    URLConnection con = urlServlet.openConnection();
    con.setUseCaches (false); 
       con.setDefaultUseCaches(false);
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false);
    con.setRequestProperty("Content-Type","application/x-java-serialized-object");
    System.out.println("9");
    return con;

  }

Logcat エラー:

      08-02 18:49:08.439: W/System.err(918):                      android.view.ViewRootImpl$CalledFromWrongThreadException  : Only the original thread that created a view hierarchy can touch its views.
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:2588)
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:608)
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:608)
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:608)
08-02 18:49:08.454: W/System.err(918):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:608)
08-02 18:49:08.454: W/System.err(918):  at android.view.View.setFlags(View.java:8412)
08-02 18:49:08.464: W/System.err(918):  at android.view.View.setFocusable(View.java:5769)
08-02 18:49:08.464: W/System.err(918):  at android.widget.AdapterView.checkFocus(AdapterView.java:718)
08-02 18:49:08.464: W/System.err(918):  at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:115)
08-02 18:49:08.464: W/System.err(918):  at android.widget.Spinner.setAdapter(Spinner.java:380)
08-02 18:49:08.464: W/System.err(918):  at com.example.manispinner.MainActivity$1.run(MainActivity.java:73)
4

2 に答える 2

0
  1. API を使用して、サーバーからデータを取得しますxmljson
  2. データを解析します。
  3. 配列に格納します。

    Do all the above in AsyncTask.
    
  4. 最後にそれをスピナーに投入します。

GitHub Spinner-Dynamicでサンプル プロジェクトを見つけてください。

于 2013-08-02T18:59:55.793 に答える
0

非 UI スレッドから UI を更新しようとしていますが、エラーが示すようにそれを行うことはできません。UIに関連することはすべてUIスレッドで行う必要があります

于 2013-08-02T18:50:49.443 に答える