2012-04-18 32 views
1

我閱讀了其他帖子,但沒有解決我的問題。我是Android上的新手。我必須連接到MSSQL,但我得到原始線程錯誤。我該如何解決這個問題?謝謝。Android錯誤:只有創建視圖層次結構的原始線程可以觸及其視圖

這裏是我的代碼:

private class MyThread implements Runnable { 
    public void run() { 

     durumKontrol(); 
     if (isConnected) { 

      new Thread(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 

        kuyrukKontrol(); 
       } 

      }).start(); 

     } else { 
      Toast toast = Toast 
        .makeText(
          getApplicationContext(), 
          "Ağa erişilemiyor. Lütfen kablosuz ağın açık olduğundan emin olunuz", 
          Toast.LENGTH_LONG); 
      toast.show(); 
     } 

     tick_Handler.postDelayed(tick_thread, firstDelay); 
     firstDelay = 10000; 
    } 

}private void kuyrukKontrol() { 
    // TODO Auto-generated method stub 

    // Hücrenin sipariş ettiği ve henüz getirilmemiş malzemelerin listesi 
    // çekiliyor 
    TextView tvIP = (TextView) findViewById(R.id.tvIP); 
    tvIP.setText(HatAdi + "-" + HucreNo); 


    try { 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     Connection conn = DriverManager 
       .getConnection("jdbc:jtds:sqlserver://x.x.x.x:1433", 
         "xx", "xxxxx"); 

     Statement query = conn.createStatement(); 

     // İlk olarak bu forklifte ait teslim edilmeyen bir talep var mı 
     ResultSet rs = query 
       .executeQuery("select * from MOBILE.dbo.fos_SS where hucreNo = '" + HucreNo + "' and sonDurum != 'T'"); 
     while (rs.next()) { 

      KuyrugaEkle(rs.getString("malzemeNo"),rs.getString("sonDurum"),rs.getString("sonIslemZamani")); 

     } 

     rs.close(); 
     conn.close(); 

    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

和KuyrugaEkle功能我動態改變佈局,我在該函數得到錯誤。

謝謝。

回答

1

您不允許修改除main之外的其他線程的UI,並且您在功能kuyrukKontrol中這樣做。使用HandlerrunOnUiThread在主線程上執行它。

1

創建MyThread的一個對象,並用它在runOnUiThread方法

MyThread mt = new MyThread(); 

獲取活動的背景和使用下面的代碼

Activity a=(Activity)context; 
      a.runOnUiThread(mt); 

傳遞應用程序上下文的MyThread的類的構造和使用正如我上面提到的那樣。

+0

您無法將getApplicationContext轉換爲一個Activity,對嗎? – 2013-09-30 15:02:25

+0

@DavidDoria:這實際上是我編輯過的活動的上下文:) – 2013-10-08 06:19:04

相關問題