cari

Rumah  >  Soal Jawab  >  teks badan

android - Bagaimana untuk membuat fungsi mengembalikan nilai pulangan permintaan tak segerak?

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];
}
扔个三星炸死你扔个三星炸死你2733 hari yang lalu1285

membalas semua(2)saya akan balas

  • 黄舟

    黄舟2017-06-26 10:51:53

    Sudah tentu anda perlu menggunakan CountDownLatch untuk menukar permintaan tak segerak kepada menyekat permintaan segerak

    public String getPhone(String id) {
        String url = "http://www.163.net/";
        final CountDownLatch latch = new CountDownLatch(1); 
        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) {
                         latch.countDown();  
                    }
    
                    @Override
                    public void onResponse(String response, int id) {
                        phone[0] = response;
                        latch.countDown();  
                    }
                });
                try {  
               latch.await();  
           } catch (InterruptedException e) {  
           }  
        return phone[0];
    }

    balas
    0
  • 世界只因有你

    世界只因有你2017-06-26 10:51:53

    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:

    public static void getPhone(String id,StringCallback cb) {
        String url = "http://www.163.net/";
    
        final String[] phone = new String[1];
        OkHttpUtils
                .get()
                .url(url)
                .addParams("username", "abc")
                .addParams("password", "123")
                .build()
                .execute(cb);
    }
    

    Bila call pun boleh

     XXutil.getPhone("1234566",new StringCallback(){
    
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        //do something
                    }
    
                    @Override
                    public void onResponse(String response, int id) {
                        //do something
                    }
    
    });

    balas
    0
  • Batalbalas