Android线程重复,不点击按钮
嗨,我是编程新手。我使用onClick(视图v)启动一个线程。它运行良好。现在,我想重复“按钮点击”,而不是再次点击按钮。我搜索了大约5个小时。但我没有得到任何答案。i用户按钮。performClick();但什么也没发生。我想重新启动我的线程 接收器:Android线程重复,不点击按钮,android,multithreading,Android,Multithreading,嗨,我是编程新手。我使用onClick(视图v)启动一个线程。它运行良好。现在,我想重复“按钮点击”,而不是再次点击按钮。我搜索了大约5个小时。但我没有得到任何答案。i用户按钮。performClick();但什么也没发生。我想重新启动我的线程 接收器: private OnClickListener connectListener = new OnClickListener() { @Override public void onClick(View v) {
private OnClickListener connectListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (!connected) {
serverIpAddress = serverIp.getText().toString();
if (!serverIpAddress.equals("")) {
Thread cThread = new Thread(new ClientThread());
cThread.start();
connectPhones = (Button) findViewById(R.id.connect_phones);
connectPhones.setPressed(false);
connectPhones.invalidate();
Handler handler1 = new Handler();
Runnable r1 = new Runnable() {
public void run() {
connectPhones.performClick();
connectPhones.setPressed(true);
connectPhones.invalidate();
connectPhones.setPressed(false);
connectPhones.invalidate();
}
};
handler1.postDelayed(r1, 1000);
}
}
}
};
public class ClientThread implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: Connecting...");
Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
connected = true;
final String path = "/sdcard/all.png";
File file = new File(path);
ObjectInputStream reader = new ObjectInputStream(socket.getInputStream());
int nRead = 0;
byte[] data = new byte[socket.getReceiveBufferSize()];
FileOutputStream fileOutputStream = new FileOutputStream( path );
// while(connected == true){
while( (nRead = reader.read(data)) != -1 ){
fileOutputStream.write( data, 0, nRead );
fileOutputStream.flush();
data = new byte[socket.getReceiveBufferSize()];
}
fileOutputStream.close();
//}
handler.post(new Runnable() {
@Override
public void run() {
Bitmap bitmap = BitmapFactory.decodeFile(path);
image.setImageBitmap(bitmap);
image.postInvalidate();
}
});
file.delete();
reader.close();
//connectPhones.performClick();
/* while (connected) {
try {
Log.d("ClientActivity", "C: Sending command.");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
// WHERE YOU ISSUE THE COMMANDS
out.println("Hey Server!");
Log.d("ClientActivity", "C: Sent.");
} catch (Exception e) {
Log.e("ClientActivity", "S: Error", e);
}
}*/
socket.close();
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
}
connected = false;
}
}
}在您的
onClick
方法中添加以下内容:
btn = (Button) findViewById(R.id.yourButton);
btn.setPressed(false);
btn.invalidate();
Handler handler1 = new Handler();
Runnable r1 = new Runnable() {
public void run() {
btn.performClick();
btn.setPressed(true);
btn.invalidate();
btn.setPressed(false);
btn.invalidate();
}
};
handler1.postDelayed(r1, 1000);
出于您的目的,我创建了一个示例代码。这段代码工作得很好。你可以试试这个。您可以在下面编写代码//DOWNLOAD FILE HERE comment
public class MainActivity extends Activity {
boolean connected = false;
Button button_example = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_example = (Button) findViewById(R.id.button1);
button_example.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "button clicked called", Toast.LENGTH_SHORT).show();
System.out.println("bb message called");
if (!connected) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
connected = true;
// DOWNLOAD FILE HERE.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
connected = false;
button_example.performClick();
}
});
}
});
thread.start();
}
}
});
}
发布相关的代码片段你怎么能点击一个按钮而不点击它呢?请清楚。您可以使用处理程序重复在按钮Click内执行的操作。何时要重新启动线程?@naddy第一次单击按钮后,应以编程方式再次单击该按钮,延迟几秒钟。可能吗?我只需要点击几下就可以了。在那之后,它就不起作用了。然后我必须再次单击按钮。下载第一个文件后,它正在崩溃。这是一个不同的问题或以上问题。堆栈跟踪中显示了什么?我删除了处理程序,但没有将UI线程用于performClick()。现在它可以正常工作了。谢谢巴拉特·沙迈,我现在也感觉很好。我有一个疑问。我们知道你正在使用thread.sleep(1000)下载进程吗?@nick我在测试它,所以忘了删除。你应该移除它。