Rangkaian meminta nombor telefon mudah alih, dan hasilnya kembali batal, kerana fungsi tersebut melaksanakan pemulangan tanpa menunggu permintaan rangkaian datang semula. Bagaimana untuk mengubah suai kod berikut?
public String getPhone(String id) {
String url = "http://www.163.net/";
final String[] phone = new String[1];
OkHttpUtils
.get()
.url(url)
.addParams("username", "abc")
.addParams("password", "123")
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
phone[0] = response;
}
});
return phone[0];
}
Sudah tentu anda perlu menggunakan CountDownLatch untuk menukar permintaan tak segerak kepada menyekat permintaan segerak
Saya rasa ada sesuatu yang salah dengan fungsi anda Id parameter formal tidak digunakan di dalamnya, yang sangat pelik. Jika anda ingin mendapatkan data tak segerak, yang paling biasa digunakan ialah panggilan balik tak segerak Anda boleh mencuba RXJava pada masa hadapan dan anda akan terkejut.
Tulis semula fungsi ini seperti berikut:
Bila call pun boleh