每个' X'重复Android代码分钟

时间:2015-01-19 16:12:46

标签: java android

我知道这个问题已经在这里做了10次,但我一直有问题需要解决,因为我是Android的新手。

我很无聊,我想创建一个应用程序,打印一个包含我的部落服务器的最后一个TeamSpeak3连接的列表。 "服务器端" job已经完成,因为我创建了一个Java程序,它在TXT文件中打印了最后一个连接(ingenium.zapto.org/joins.txt)。现在,我只想创建一个Android应用程序来打印每个TXT文件的内容' X'分钟,例如,每10分钟。

我已经有了访问TXT文件并打印它的代码,但是我无法让它每10分钟重新打印一次。 我知道有一些工具,比如AlarmManager,Handlers,Timers ......但是我很困惑,我不知道在这种情况下最好用的是什么,更重要的是,我没有'知道如何使它们在我的代码中工作。

MainActivity.java

package org.zapto.ingenium.fetchurl;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {

private TextView txtJoins;

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

    txtJoins = (TextView)findViewById(R.id.TxtJoins);

    FetchURL fu = new FetchURL();

    fu.Run("http://192.168.0.10/joins.txt");

    String o = fu.getOutput();

    txtJoins.setText("Last connections: \n" + o);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

FetchURL.java

package org.zapto.ingenium.fetchurl;

/**
 * Created by Martin on 18/01/2015.
 */
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class FetchURL {

private String output;
private String url;

public FetchURL()
{
    output = "";
}

public String getOutput()
{
    return output;
}


public void Run(String u)
{
    url = u;
    Thread t =  new Thread() {

        public void run() {

            URL textUrl;
            try {

                textUrl = new URL(url);

                BufferedReader bufferReader = new BufferedReader(new InputStreamReader(textUrl.openStream()));

                String StringBuffer;
                String stringText = "";
                while ((StringBuffer = bufferReader.readLine()) != null) {
                    stringText += "\n" + StringBuffer;
                }
                bufferReader.close();

                output = stringText;

            } catch (Exception e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();

                output= e.toString();
            }

        }
    };

    t.start();
    try {
        t.join();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
}

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LytContenedorSaludo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView android:id="@+id/TxtJoins"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="" />

</LinearLayout>

总之,我想重复这三行代码(MainActivity.java):

    fu.Run("http://192.168.0.10/joins.txt");

    String o = fu.getOutput();

    txtJoins.setText("Last conections: \n" + o);
例如,每10分钟一次。

3 个答案:

答案 0 :(得分:0)

完成代码后,使用Handler,10分钟后再执行一次?

handlerTimer.postDelayed(new Runnable(){
    public void run() {
      // do something             
  }}, 600000);

// 1000 = 1秒// 60000 = 60秒(1分钟)// 600000 = 600秒(10分钟)

答案 1 :(得分:0)

您可以添加Thread并让它每10分钟重复一次此任务。像下面这样的东西会起作用。首先声明新的Thread

public class MainActivity extends ActionBarActivity {

private TextView txtJoins;
private Thread repeatTaskThread;

@Override
protected void onCreate(Bundle savedInstanceState) {

    // Rest of code...

然后创建一个包含新Thread的简单方法:

private void RepeatTask()
{
    repeatTaskThread = new Thread()
    {
        public void run()
        {
            while (true)
            {

                FetchURL fu = new FetchURL();
                fu.Run("http://192.168.0.10/joins.txt");
                String o = fu.getOutput();
                // Update TextView in runOnUiThread
                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        txtJoins.setText("Last connections: \n" + o);
                    }
                });
                try
                {
                    // Sleep for 10 minutes
                    Thread.sleep(600000)
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        };
    };
    repeatTaskThread.start();
}

最后,在onCreate()

结束时调用您的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Rest of code...

    RepeatTask();
}

答案 2 :(得分:0)

10分钟10分钟运行指令 http://developer.android.com/reference/android/os/CountDownTimer.html

new CountDownTimer(10000, 1000) {

     public void onTick(long millisUntilFinished) {

     }

     public void onFinish() {
        fu.Run("http://192.168.0.10/joins.txt");
        String o = fu.getOutput();
        txtJoins.setText("Last conections: \n" + o);
        .start();
     }
  }.start();