2012-04-18 2 views
1

다른 게시물을 읽었지만 문제가 해결되지 않았습니다. 나는 안드로이드에 초보자입니다. 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

메인을 제외한 스레드에서 UI를 수정할 수 없으며 기능은 kuyrukKontrol입니다. 주 스레드에서 수행하려면 Handler 또는 runOnUiThread을 사용하십시오.

1

MyThread 클래스의 생성자 및 사용에 응용 프로그램 컨텍스트를 통과 다음 코드

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

을 MyThread의 객체를 생성하고 활동의 컨텍스트를 가져옵니다 runOnUiThread 방법

MyThread mt = new MyThread(); 

에서 사용하고 사용 내가 위에서 언급 한 것처럼.

+0

getApplicationContext를 반드시 액티비티로 캐스트 할 수있는 것은 아닙니다. 맞습니까? –

+0

@DavidDoria : 실제로 활동의 컨텍스트입니다. 편집했습니다. :) –

관련 문제