public void load(final int state){ new Thread(new Runnable() { @Override public void run() { String url = "/order/display/state?username=\'"+ MainActivity.loginusername+"\'&state="+state; Call call = okhttputil.request_get(url); try{ String string = call.execute().body().string(); JSONObject jsonObject = new JSONObject(string); data = jsonObject.getString("data"); handler.post(udpUIRunnable); }catch (Exception e){ e.printStackTrace(); } } }).start(); }
时间: 2024-02-10 07:19:57 浏览: 83
这段代码定义了一个 load 方法,它接受一个 int 类型的参数 state。这个方法会在一个新线程中执行,它首先构造一个 URL 字符串,然后使用 OkHttp 库发送一个 GET 请求,并将响应结果存储到一个字符串中。接着,它将响应字符串解析成一个 JSONObject 对象,并从中获取名为 "data" 的键的值,存储到 data 变量中。最后,它使用一个 handler 对象将一个 Runnable 对象 udpUIRunnable 发送到 UI 线程中,以更新 UI。这个 Runnable 对象会在前面的问题中介绍。这个方法的作用是从服务器获取订单数据,然后更新 UI 显示这些数据。
相关问题
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ipEditText = findViewById(R.id.ipEditText); portEditText = findViewById(R.id.portEditText); Button connectButton = findViewById(R.id.connectButton); connectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ip = ipEditText.getText().toString(); int port = Integer.parseInt(portEditText.getText().toString()); new ConnectTask().execute(ip, String.valueOf(port)); } }); Button sendMessageButton = findViewById(R.id.sendMessageButton); sendMessageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showSendMessageDialog(); } }); } private class ConnectTask extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { String ip = params[0]; int port = Integer.parseInt(params[1]); try { socket = new Socket(ip, port); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // 在 UI 线程中创建 SeekBar handler.post(new Runnable() { @Override public void run() { SeekBar progressBar = findViewById(R.id.progressBar); progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 计算百分比对应的数字 int number = progress * 10; // 在 UI 线程中更新 ProgressBar 的进度 handler.post(new Runnable() { @Override public void run() { seekBar.setProgress(number); } }); out.println(number); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); } }); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { // 在连接结束后做一些处理 // 比如关闭连接或者显示连接成功的提示 } }代码修改
在 ConnectTask 的 doInBackground 方法中,将 SeekBar 的创建和更新进度的操作都放在了一个 handler.post 的 Runnable 中,从而保证了在子线程中进行操作,避免了在 UI 线程中进行耗时操作的问题。
```
private class ConnectTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
String ip = params[0];
int port = Integer.parseInt(params[1]);
try {
socket = new Socket(ip, port);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
// 在子线程中创建 SeekBar
final SeekBar progressBar = new SeekBar(MainActivity.this);
progressBar.setMax(10);
progressBar.setProgress(0);
// 在 UI 线程中添加 SeekBar 到布局中
handler.post(new Runnable() {
@Override
public void run() {
LinearLayout layout = findViewById(R.id.layout);
layout.addView(progressBar);
}
});
progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 计算百分比对应的数字
int number = progress * 10;
// 在子线程中更新 ProgressBar 的进度
handler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progress);
}
});
out.println(number);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// 在连接结束后做一些处理
// 比如关闭连接或者显示连接成功的提示
}
}
```
1. 编写线程程序,在新线程中完成计算某个整数的阶乘。分别用Thread类和Runnable接口实现。
使用Thread类实现:
```java
public class FactorialThread extends Thread {
private int n;
public FactorialThread(int n) {
this.n = n;
}
@Override
public void run() {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
System.out.println(n + "! = " + result);
}
}
```
使用Runnable接口实现:
```java
public class FactorialRunnable implements Runnable {
private int n;
public FactorialRunnable(int n) {
this.n = n;
}
@Override
public void run() {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
System.out.println(n + "! = " + result);
}
}
```
使用方法:
```java
public class Main {
public static void main(String[] args) {
// 使用Thread类实现
Thread t1 = new FactorialThread(5);
t1.start();
// 使用Runnable接口实现
FactorialRunnable r = new FactorialRunnable(6);
Thread t2 = new Thread(r);
t2.start();
}
}
```
阅读全文