2012-01-23 1 views
0

Я работаю над проектом моей домашней работы, и я застрял. Я создал простое приложение с несколькими текстовыми полями и четырьмя кнопками - вычисление, сброс, о, выход. Для этого я начал «вычисление» потока. Идея заключается в том пользователь подает в некоторых значениях в специально отведенных для текстовых полей, рабочей пресса вычислить и результаты появляются в других fields.And я хочу, чтобы запустить весь расчет в основном классе и вот часть моего code-Как назначить runnable кнопке Android в основном классе?

public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
     break; 
     // More buttons go here (if any) ... 
     case R.id.exit_button: 
     finish(); 
     break; 
     case R.id.reset_button: 
      clearAllFields(); 
      break; 
     case R.id.calculate_button: 
      startCalculation(); 
      break;}} 
void startCalculation() { 
    calculation = new Thread(this); 
    calculation.start();} 

но когда я запускаю и нажимаю вычисление, сила приложения закрывается. Любая помощь будет высоко оценена. Заранее спасибо

+0

Почему вы кормите «этим» в конструкторе 'Thread'? Вы должны смотреть на свою трассировку стека при сбое приложения, потому что это даст вам подсказку о том, где (и почему) ваше приложение разбилось. – Graeme

+0

@Marvin Pinto - Мне разрешено использовать только runnable. – user1149621

+0

@Graeme Ну, я удалил это из конструктора. Приложение запускалось и не разбилось, но оно тоже не подсчитывалось. – user1149621

ответ

0

Я всегда делаю это так:

 

this.hiButton = (Button)this.findViewById(R.id.HI); 
    this.hiButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     sayHalloYouWonderfulWorldOfAndroid(); 
    } 
    }); 
+0

И обычно используется ленивый шаблон – sherif

0
void startCalculation() { 
calculation = new Thread(this);* 
calculation.start();} 
  • Этот фрагмент кода делает строит новую нить с аргументом this. Как видно из документации here, это будет означать, что при вызове start() он просто вызовет метод аргумента run(), который вы передали в конструктор. Если вы не имеете преодолено run() метода в this ...

Если вы хотите тему на самом деле делать любую работу, то вы должны дать ему конструктор без аргументов и переопределить метод запуска, создавая анонимный класс. Вы можете сделать это следующим образом:

Thread calculation = new Thread() { 
    @Override 
    public void run() { 
    // Do calculation here 
} 

Чтобы получить ответ, чтобы отобразить на вашей странице, вы должны использовать Handler. Но вы можете посмотреть, что само ваше собственное :)

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