1

我试图每 5 分钟读取一次文件,但我真的不知道怎么做!

这是我的代码:

public class MainActivity extends Activity implements OnClickListener {

Button bVe, bCl, bCo, bAd;
File tarjeta = Environment.getExternalStorageDirectory();

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

    bVe = (Button) findViewById(R.id.bVehiculos);
    bCl = (Button) findViewById(R.id.bClientes);
    bAd = (Button) findViewById(R.id.bAdmin);

    bVe.setOnClickListener(this);
    bCl.setOnClickListener(this);
    bAd.setOnClickListener(this);


    File file1 = new File(tarjeta.getAbsolutePath()+"/.Info/Prices", "values.txt");        
    try {
        FileInputStream fIn1 = new FileInputStream(file1);   
        InputStreamReader archivo1 = new InputStreamReader(fIn1);
        BufferedReader br1 = new BufferedReader(archivo1);
        String linea1 = br1.readLine();
        String texto1 = "";
        while (linea1!=null)
        {
            texto1 = texto1 + linea1 + "\n";
            linea1 = br1.readLine();
        }
        br1.close();
        archivo1.close();


    } catch (IOException e) {
        Toast.makeText(this, "Cant read", Toast.LENGTH_SHORT).show();
    }

我需要的是当我在这个活动中时,它每 5 分钟读取一次文件。

我将非常感谢任何帮助!

4

2 回答 2

2

为什么要每五分钟检查一次?您可以使用FileObserver

FileObserver observer = 
new FileObserver(Environment.getExternalStorageState() +"/documents/") {
    @Override
    public void onEvent(int event, String file) {
        if(event == FileObserver.MODIFY && file.equals("fileName")){ 
            Log.d("TAG", "File changed");
            // do something
        }
    }
};

这不是更容易且更少的 CPU/电池消耗,是吗?在https://gist.github.com/shirou/659180查看另一个很好的例子。

ps 在您的情况下,您可能会使用...

new FileObserver(tarjeta.getAbsolutePath()+"/.Info/Prices/")

file.equals("values.txt")

...可能还有更多的事件类型。

只是一个想法......干杯!

于 2013-04-09T18:20:26.353 回答
0

尝试这样的事情:

getHandler().post(new Runnable() {
    @Override
    void run() {
        (code to read file)
        getHandler().postDelayed(this,300000);
    }
});

它所做的是将此 Runnable 推送到 ui 线程中,该线程在 5 分钟(300000 毫秒)内将自身发布到同一线程中。

于 2013-04-09T18:15:58.547 回答