2014-10-19 23 views
0

我想通過使用extends TimerTask的其他類來執行每秒的方法。我認爲它不起作用的原因是我試圖執行一個方法,最終將一個值返回給MainActivity。這就是爲什麼:我通過使該方法不返回任何東西(只是將某些東西打印到控制檯)來測試代碼,並且它工作正常。有代碼在x秒後執行 - Java,Android

這裏是我的代碼看起來像返回的方法摘要:

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Timer timer = new Timer(); 
    timer.schedule(new doStuff(), 0, 1000); 
} 

public void method1(String string){ 
    //things happen 
} 

} 

//---------------------------------------- 

class doStuff extends TimerTask{ 

@Override 
public void run(){ 

    String string = stringMethod(); 
    MainActivity ma = new MainActivity(); 
    ma.method1(string);   
} 

    public String stringMethod(){ 
     //gets the required string 
     return "String"; 
    } 
} 

注意,這個方法本身並不直接返回一個值MainActivityrun()這樣做。

當我嘗試在我的Android設備上運行代碼時,LogCat說了一些關於notify()沒有阻止的內容。不確定。不記得了。 我只想知道在解決這個問題之前是否有一個更簡單的方法,不需要兩個類。

*對不起,愚蠢的名字。我只是爲了演示目的而製作它們。

回答

1

嘗試使用處理程序:

final Handler handler=new Handler(); 

final Runnable runnable = new Runnable() 
{ 
    public void run() 
    { 
     //This will run every 1000ms. Put code here(UI safe) 
     handler.postDelayed(this, 1000); 
    } 
}; 

handler.postDelayed(runnable, 1000); 
+0

我貼你的代碼的Android Studio和它強調''從handler.postDelay(這一點,1000)handler''並說:'錯誤:(56 17 )錯誤:局部變量處理程序是從內部類中訪問的;需要宣佈最終'。我應該如何解決這個問題? **編輯:**我把'最後'放在'Handler handler = new Handler();'的前面,它工作正常!謝謝! – 2014-10-20 14:47:28

+0

它報告解決方案。最終處理程序= new Handler() – 2014-10-20 14:49:23