2013-09-19 2 views
0

Я пытаюсь подключить свое приложение Android к базе данных mysql с помощью драйвера jdbc. Я много искал и обнаружил, что используя thread или AsyncTask, мы можем напрямую подключиться к mysql. Но я нашел сложным в asynctask, поэтому я использую thread для этого. Вот мой код:Тема не работает в android

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search_customer); 
    TextView t = (TextView) findViewById(R.id.Search_Customer_textView1); 
    Button b = (Button) findViewById(R.id.Search_Customer_button1); 
    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Thread timer=new Thread(){ 
       public void run(){ 
        try { 
         Class.forName("com.mysql.jdbc.Driver"); 
         con = DriverManager.getConnection("jdbc:mysql://192.168.1.102:3306/outsidelaundry", "root", ""); 
         Statement stmt = con.createStatement(); 
         String query = "select Name from nonmember"; 
         ResultSet rs = stmt.executeQuery(query);   
         while(rs.next()) 
         { 
          val = val + rs.getString(1) + "\n"; 
         } 
         Toast.makeText(getApplicationContext(), val, Toast.LENGTH_LONG).show(); 
         con.close(); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 
      timer.start(); 
      Toast.makeText(getApplicationContext(), "pressed", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    } 

Когда я запускаю нить программы, не запускается/работает. Я не получил никаких исключений. Пожалуйста, помогите мне с этим.

+0

Вы показываете тост внутри потока, используя 'runOnUiThread' – Raghunandan

+0

Можете ли вы объяснить это .... Я не знаю, где его использовать –

+0

Запишите некоторую информацию в методе запуска потоков и посмотрите, работает ли поток – Raghunandan

ответ

2

Вы отображающего Тост внутри нити. Вы должны обновить ui на нити ui.

Способ использования внутренней резьбы используется runOnUiThread. runOnUiThread - это метод вашего класса активности. Добавить @Override

Thread timer=new Thread(){ 
     @Override 
     public void run(){ 
      Log.i("Thread","Running"); 
      // you should see the log message if the thread runs 
      try { 

        // do othere operations 
       runOnUiThread(new Runnable() { 
         @Override 
        public void run() { 
         // dispaly toast here; 
        } 
       }); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    timer.start(); 

Вы также можете использовать асинтекс.

0

Посмотрев на свой код, я вижу, что это исключение генерируется, но вы его кэшировали так, чтобы не наблюдалось видимого силового закрытия при запуске кода.

Простые взять текстовое поле в макете и попытаться установить текст для этого в качестве ответа. который подтверждает, что у вас нет проблем с JDBC или базой данных.

, и если это удастся, то AsynTask является лучшим для использования здесь.

1

Вам нужно позвонить Тост на runOnUiThread() методом

activity.runOnUiThread(new Runnable() { 
    public void run() { 
     Toast.makeText(getApplicationContext(), val, Toast.LENGTH_LONG).show(); 
    } 
}); 
0

Попробуйте это ...

try{ 
    timer.join(); 
     } 
    catch (Exception e) { 
        e.printStackTrace(); 
       } 

Мы должны подождать, пока конца резьбы она работает.

Смежные вопросы