ฉันจะทำให้ Robospice ปฏิบัติต่อสิ่งอื่นนอกเหนือจากการตอบสนอง 200 จาก Retrofit & OKHttp ว่าเป็นข้อผิดพลาดได้อย่างไร

ฉันใช้ Robospice บน Android พร้อมชุดติดตั้งเพิ่มและ OKHttp ทั้งหมดใช้งานได้ดีโดยมีการตอบกลับกลับไปยังกิจกรรมโดยใช้ Robospice RequestListener ปัญหาคือจะส่งคืนความล้มเหลวหากการเชื่อมต่อหมดเวลาหรือปัญหาเครือข่ายอื่นเท่านั้น หากส่งคืน 401 จะถือว่าสำเร็จแต่มีการตอบกลับเป็นโมฆะ เนื่องจากไม่สามารถแยกวิเคราะห์ JSON ลงใน MobileAppSetup POJO ของเราได้

ในขณะนี้ ฉันต้องทำการตรวจสอบการตอบสนองเป็นโมฆะ แต่ฉันไม่รู้ว่าสาเหตุคืออะไร หากเป็นข้อผิดพลาดของเซิร์ฟเวอร์หรือ 401 ที่ถูกต้อง

public final class HTTPRequestListener implements RequestListener<MobileAppSetup> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        Log.d("", "failure:"+ spiceException);
        loginProgress.hide();

    }

    @Override
    public void onRequestSuccess(final MobileAppSetup response) {
        Log.d("","success. Data: "+response);

        if(response==null)
            showDialog("Error logging in", "Please check your username and password and try again.", "");

        loginProgress.hide();

        postLoginProcess(response);

    }
} 

ฉันต้องส่งข้อผิดพลาดเหล่านี้ไปยังการโทรกลับ onRequestFailure เพื่อให้ฉันสามารถจัดการได้อย่างถูกต้อง มีวิธีระบุรหัสข้อผิดพลาดที่ Robospice ควรถือเป็นข้อผิดพลาดหรือไม่ ฉันคิดว่ามันเกี่ยวข้องกับการเพิ่มตัวจัดการข้อผิดพลาดแบบกำหนดเองบางประเภท แต่ไม่สามารถหาวิธีแก้ไขได้จริงๆ ในขณะนี้


person fraserh    schedule 25.03.2014    source แหล่งที่มา
comment
นั่นเป็นสิ่งที่ควรมองหาในฟอรัมชุดติดตั้งเพิ่ม ซึ่งเกี่ยวข้องกับ RS เท่านั้น   -  person Snicolas    schedule 12.04.2014
comment
@Snicolas เนื่องจากข้อผิดพลาดของไคลเอนต์ okhttp จึงควรลองใช้รุ่นล่าสุดใหม่ดีกว่า   -  person LOG_TAG    schedule 23.04.2014


คำตอบ (1)


เนื่องจากข้อผิดพลาดในไคลเอ็นต์ OKHTTP ข้อผิดพลาดที่เป็นไปได้!

ปัญหาคือเมื่อเซิร์ฟเวอร์ตอบด้วยการตอบสนอง 401 ที่ไม่ได้รับอนุญาต วัตถุ Callback จะเรียกวิธีการล้มเหลว ()

เมื่อเซิร์ฟเวอร์กลับมาด้วยสถานะ 401 ออบเจ็กต์การตอบสนอง RetrofitError จะเป็นโมฆะ และแฟล็ก networkError ถูกตั้งค่าเป็นจริง ทำให้แอปไม่สามารถตรวจสอบ error.getResponse().getStatus() ได้ ฉันเชื่อว่าข้อผิดพลาดอยู่ที่ไคลเอ็นต์ http เมื่อใช้ OkClient ฉันได้รับข้อผิดพลาดนี้: java.io.IOException: ไม่พบความท้าทายในการตรวจสอบสิทธิ์

ฉันขอแนะนำให้คุณดาวน์โหลดไฟล์ okhttp jar ใหม่จาก http://square.github.io/okhttp/ รันโปรเจ็กต์อีกครั้ง! หรือลองใช้ไคลเอนต์อื่นแทน okhttp

person LOG_TAG    schedule 23.04.2014