2014-09-03 5 views
1

У меня проблема с изменением цвета фона. Я хочу изменить его через три секунды после начала работы. Я создал таймер и обработчик + runnable.It прекрасно работает, когда я хочу изменить специальный EditText через три секунды. но когда я добавляю строку layout_interact.setBackgroundColor(Color.GREEN); и запускаю приложение в виртуальном устройстве, он вылетает, когда он запускает действие, которое содержит таймер и обработчик. Я также попытался запустить новое действие через три секунды, но в результате получилась та же ошибка. Вот мой код:Android - Изменение цвета фона через определенное время

public class ActivityInteractProcess extends Activity{ 
final Handler handler_interact=new Handler();//not defined as final variable. may cause problem 
View layout_interact=(View) findViewById(R.id.layoutintprocess); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.page_interact_process); 


    //creating timer 
    Timer timer_interact=new Timer(); 
    timer_interact.schedule(new TimerTask() { 
      @Override 
     public void run() {UpdateGUI();} 
     }, 3000); 
    } 
    private void UpdateGUI() { 
    handler_interact.post(runnable_interact);   
    } 
    //creating runnable 
    final Runnable runnable_interact = new Runnable() { 
     public void run() { 
     layout_interact.setBackgroundColor(Color.GREEN); //this is the line which makes the app Force close. 
     } 
    }; 
} 

Я не забыл добавить следующую строку в XML макет деятельности:

android:id="@+id/layoutintprocess" 

Здесь находятся ошибки я получил в LogCat:

AndroidRuntime(571): FATAL EXCEPTION: main 
AndroidRuntime(571): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{aiLab.tests.autism/aiLab.tests.autism.ActivityInteractProcess}: java.lang.NullPointerException 
AndroidRuntime(571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1739) 
AndroidRuntime(571): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
AndroidRuntime(571): at android.app.ActivityThread.access$500(ActivityThread.java:122) 
AndroidRuntime(571): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
AndroidRuntime(571): at android.os.Handler.dispatchMessage(Handler.java:99) 
... 

ответ

3

изменить свой код на это:

public class ActivityInteractProcess extends Activity{ 
final Handler handler_interact=new Handler();//not defined as final variable. may cause  problem 
View layout_interact; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.page_interact_process); 
layout_interact =(View) findViewById(R.id.layoutintprocess); 


} 


@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    //creating timer 
    Timer timer_interact=new Timer(); 
    timer_interact.schedule(new TimerTask() { 
     @Override 
     public void run() {UpdateGUI();} 
    }, 3000); 
} 
private void UpdateGUI() { 
    handler_interact.post(runnable_interact); 
} 
//creating runnable 
final Runnable runnable_interact = new Runnable() { 
    public void run() { 
     layout_interact.setBackgroundColor(Color.GREEN); 
    } 
}; 
} 
+0

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

+0

спасибо. Я попробовал еще несколько раз, и это сработало. проблема установки возникает время от времени для меня. Я не знаю почему. – 0saber0