Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改数据值后如何重新启动处理程序?_Java_Android_Handler - Fatal编程技术网

Java 更改数据值后如何重新启动处理程序?

Java 更改数据值后如何重新启动处理程序?,java,android,handler,Java,Android,Handler,早上好StackOverFlow我的处理程序有一些问题我正试图在main活动myClient.java中启动,50秒后发送消息并停止客户端,这就是工作,但每次更改ip\U txt或term\u txt在设置中。java (通过单击按钮将数据从EditText保存到DB) 这是我的主要活动: public class MainActivity extends AppCompatActivity { Server server; Client client;

早上好StackOverFlow我的
处理程序有一些问题
我正试图在
main活动
myClient.java中启动,50秒后发送消息并停止客户端,这就是工作,但每次更改
ip\U txt
term\u txt
设置中。java (通过单击按钮将数据从EditText保存到DB)

这是我的主要活动:

        public class MainActivity extends AppCompatActivity {
    Server server;
    Client client;
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
    @Override
    public void run() {
        new ConnectTask().execute("");
        if (client != null) {
            client.sendMessage("IP#" + ipp + " " + "N#" + trm);
        }
        if (client != null) {
            client.stopClient();
        }
    }
};
settings Settings;
public static TextView terminale, indr, msg;
TextView log;
String ipp,trm;
DataBaseHandler myDB;
allert Allert;
SharedPreferences prefs;
String s1 = "GAB Tamagnini SRL © 2017 \n" +
        "Via Beniamino Disraeli, 17,\n" +
        "42124 Reggio Emilia \n" +
        "Telefono: 0522 / 38 32 22 \n" +
        "Fax: 0522 / 38 32 72 \n" +
        "Partita IVA, Codice Fiscale \n" +
        "Reg. Impr. di RE 00168780351 \n" +
        "Cap. soc. € 50.000,00 i.v. \n" + "" +
        "REA n. RE-107440 \n" +
        "presso C.C.I.A.A. di Reggio Emilia";
ImageButton settings, helps, allerts, home;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Utils.darkenStatusBar(this, R.color.colorAccent);
    server = new Server(this);
    myDB = DataBaseHandler.getInstance(this);

    msg = (TextView) findViewById(R.id.msg);
    log = (TextView) findViewById(R.id.log_avviso);
    settings = (ImageButton) findViewById(R.id.impo);
    helps = (ImageButton) findViewById(R.id.aiut);
    allerts = (ImageButton) findViewById(R.id.msge);
    home = (ImageButton) findViewById(R.id.gab);
    terminale = (TextView) findViewById(R.id.terminal);
    indr = (TextView) findViewById(R.id.indr);

    final Cursor cursor = myDB.fetchData();
    if (cursor.moveToFirst()) {
        do {
            indr.setText(cursor.getString(1));
            terminale.setText(cursor.getString(2));
            Client.SERVER_IP = cursor.getString(1);
            trm = cursor.getString(2);
        } while (cursor.moveToNext());
    }



    WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
    ipp = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());


    handler.postDelayed(runnable,5000);

    cursor.close();
    server.Parti();


    home.setOnClickListener(new View.OnClickListener() {
                                int counter = 0;
        @Override
        public void onClick(View view) {
                                    counter++;
                                    if (counter == 10) {
                                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                                        builder.setCancelable(true);
                                        builder.setMessage(s1);
                                        builder.show();
                                        counter = 0;
                                    }
        }
    });

    settings.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent impostazioni = new Intent(getApplicationContext(), settingsLogin.class);
            startActivity(impostazioni);
        }
    });

    helps.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent pgHelp = new Intent(getApplicationContext(), help.class);
            startActivity(pgHelp);
        }
    });

    allerts.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Server.count = 0;
            SharedPreferences prefs = getSharedPreferences("MY_DATA", MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.clear();
            editor.apply();
            msg.setVisibility(View.INVISIBLE);
            Intent pgAlert = new Intent(getApplicationContext(), allert.class);
            startActivity(pgAlert);
        }
    });

}

@Override
protected void onDestroy() {

    super.onDestroy();
    server.onDestroy();
}

public class ConnectTask extends AsyncTask<String, String, Client> {

    @Override
    protected Client doInBackground(String... message) {


        client = new Client(new Client.OnMessageReceived() {
            @Override

            public void messageReceived(String message) {

                publishProgress(message);
            }
        });
        client.run();

        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);

        Log.d("test", "response " + values[0]);


    }
}

}

(如果我没有解释,我想在应用程序开始时启动
处理程序
,并且
EditText-ip_-txt
EditText-term_-txt
中更改数据后立即重新启动它)。

我会创建变量来存储处理程序和可运行的,然后,如果要重新启动,只需使用:

yourHandler.removeCallback(yourRunnable);
yourHandler.postDelayed(yourRunnable,time);
开始的时候,就像你做的那样

yourHandler.postDelayed(yourRunnable,5000);
希望就是你想要的


如何创建它们:

public class ClassName{
    Handler yourHandler = new Handler();
    Runnable yourRunnable = new Runnable(){
        @Override
        public void run() {
            //yourCode
        }
    };
    // Rest of class code

}

与您在代码中所做的相同,只是在变量中。

如何创建该变量?你能为它添加一个例子吗?我刚刚用MainActivity代码更新了这个问题,当我创建runnable时,它使“new ConnectTask().execute(“”)”工作,但其他操作(其他2个if)没有启动。我假设您的
客户端
必须为空。实际上,它在与TCP客户端的连接中以及在第二个消息发送和停止客户端中使用了2个不同的runnable,但是我如何才能像上面所做的那样将其放在1 runnable中?比如我可以在ConnectTask和两个if之间的runnable中做一个延迟吗?当然你可以做一个延迟,只要把你的if代码放到另一个runnable中并做另一个处理程序,这将使if语句在你想要的时间后得到计算
public class ClassName{
    Handler yourHandler = new Handler();
    Runnable yourRunnable = new Runnable(){
        @Override
        public void run() {
            //yourCode
        }
    };
    // Rest of class code

}