gpt4 book ai didi

java - 更改数据值后如何重新启动Handler?

转载 作者:行者123 更新时间:2023-12-02 12:35:48 25 4
gpt4 key购买 nike

早上好,StackOverFlow 我在尝试在 MainActivity 中启动我的客户端时,遇到了 Handler 的一些问题。 java 50 秒后,还发送消息并停止客户端,这可以工作,但我必须在 ip_txtterm_txt 的每次更改时重新打开连接 <设置.java (通过单击按钮将数据从 EditText 保存到数据库)

这是我的MainActivity:

        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]);


}
}

}

这是我的settings.java:

public class settings extends AppCompatActivity {

TextView indr;
Client client;
EditText ip_txt,term_txt;
ImageButton home;
Button save;
DataBaseHandler myDB;
MainActivity activity;
String ipp;

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

home = (ImageButton) findViewById(R.id.stgbtn);
indr = (TextView) findViewById(R.id.ipp);
ip_txt = (EditText) findViewById(R.id.ip);
term_txt = (EditText) findViewById(R.id.nTermin);
save = (Button) findViewById(R.id.save);


Cursor cursor = myDB.fetchData();
if(cursor.moveToFirst()){
do {
ip_txt.setText(cursor.getString(1));
term_txt.setText(cursor.getString(2));
}while(cursor.moveToNext());
}
cursor.close();
AddData();

home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});




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


}

public void AddData() {
save.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
myDB.insertData(ip_txt.getText().toString(),
term_txt.getText().toString());
MainActivity.indr.setText(ip_txt.getText().toString());
MainActivity.terminale.setText(term_txt.getText().toString());
Client.SERVER_IP = ip_txt.getText().toString();
finish();
}
}
);
}

}

( 如果我没有解释,我想在应用程序启动时启动 处理程序 并且 再次启动或在更改数据后立即启动 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

}

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

关于java - 更改数据值后如何重新启动Handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45161326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com