คำถามติดแท็ก retrofit

Retrofit เป็นไคลเอนต์ REST ประเภทปลอดภัยสำหรับ Android และ Java โดย Square, Inc.

7
ฉันจะจัดการ“ ไม่มีการเชื่อมต่ออินเทอร์เน็ต” ด้วย Retrofit บน Android อย่างไร
ฉันต้องการจัดการกับสถานการณ์เมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต โดยปกติฉันจะวิ่ง: ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); (จากที่นี่ ) ก่อนส่งคำขอไปยังเครือข่ายและแจ้งให้ผู้ใช้ทราบหากไม่มีการเชื่อมต่ออินเทอร์เน็ต จากสิ่งที่ฉันเห็นว่า Retrofit ไม่ได้จัดการกับสถานการณ์นี้โดยเฉพาะ หากไม่มีการเชื่อมต่ออินเทอร์เน็ตฉันจะได้รับRetrofitErrorหมดเวลาเป็นเหตุผล หากฉันต้องการรวมการตรวจสอบประเภทนี้ในคำขอ HTTP ทุกรายการด้วย Retrofit ฉันควรทำอย่างไร หรือควรทำเลย. ขอบคุณ อเล็กซ์
119 android  retrofit 

12
รับวัตถุ JSON ที่ซ้อนกันด้วย GSON โดยใช้ชุดติดตั้งเพิ่มเติม
ฉันใช้ API จากแอป Android ของฉันและการตอบสนอง JSON ทั้งหมดเป็นดังนี้: { 'status': 'OK', 'reason': 'Everything was fine', 'content': { < some data here > } ปัญหาคือว่า POJOs ของฉันทุกคนมีstatus, reasonสาขาและภายในcontentสนามเป็นตัวจริง POJO ฉันต้องการ มีวิธีใดบ้างในการสร้างตัวแปลง Gson ที่กำหนดเองเพื่อแยกcontentฟิลด์เสมอดังนั้นการติดตั้งเพิ่มจะส่งคืน POJO ที่เหมาะสม
111 java  android  json  gson  retrofit 

3
รับรหัสสถานะการตอบกลับโดยใช้ Retrofit 2.0 และ RxJava
ฉันกำลังพยายามอัปเกรดเป็น Retrofit 2.0 และเพิ่ม RxJava ในโปรเจ็กต์ Android ของฉัน ฉันกำลังทำการเรียก API และต้องการดึงรหัสข้อผิดพลาดในกรณีที่มีการตอบสนองข้อผิดพลาดจากเซิร์ฟเวอร์ Observable<MyResponseObject> apiCall(@Body body); และในการเรียก RxJava: myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MyResponseObject myResponseObject) { //On response from server } }); ใน Retrofit 1.9 RetrofitError ยังคงมีอยู่และเราสามารถรับสถานะได้โดยทำ: error.getResponse().getStatus() …

10
ใช้ JsonReader.setLenient (true) เพื่อยอมรับ JSON ที่ผิดรูปแบบที่บรรทัด 1 คอลัมน์ 1 เส้นทาง $
ข้อผิดพลาดนี้คืออะไร? ฉันจะแก้ไขปัญหานี้ได้อย่างไร? แอปของฉันกำลังทำงาน แต่ไม่สามารถโหลดข้อมูลได้ และนี่คือข้อผิดพลาดของฉัน: ใช้ JsonReader.setLenient (true) เพื่อยอมรับ JSON ที่ผิดรูปแบบที่บรรทัด 1 คอลัมน์ 1 เส้นทาง $ นี่คือส่วนของฉัน: public class news extends Fragment { private RecyclerView recyclerView; private ArrayList<Deatails> data; private DataAdapter adapter; private View myFragmentView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myFragmentView = inflater.inflate(R.layout.news, container, false); …
111 android  json  gson  retrofit 

4
ทำไมต้องใช้ Retrofit เมื่อเรามี OkHttp
ด้วย OkHttp เราสามารถส่งคำขอ HTTP จากนั้นได้รับการตอบสนองจากเซิร์ฟเวอร์ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); จากนั้นด้วย Gson lib แปลงการตอบสนองต่อวัตถุที่เราต้องการ นี่มาจาก Square / OkHttp doc: API คำขอ / การตอบกลับได้รับการออกแบบโดยใช้เครื่องมือสร้างที่คล่องแคล่วและไม่เปลี่ยนรูป รองรับทั้งการบล็อกการโทรแบบซิงโครนัสและการโทรแบบไม่ซิงค์พร้อมการโทรกลับ ฉันอ่านจากstackOverFlow ชุดติดตั้งเพิ่มเติมใช้ OkHTTP โดยอัตโนมัติหากมี . คำถามของฉันคือ Retrofit คืออะไรกันแน่? Retrofit ทำอะไรที่ OkHttp ทำไม่ได้?! ฉันคิดว่า OkHttp และ …
110 java  android  retrofit  okhttp 

11
สแควร์ติดตั้งเซิร์ฟเวอร์จำลองสำหรับการทดสอบ
วิธีใดเป็นวิธีที่ดีที่สุดในการจำลองเซิร์ฟเวอร์เพื่อทดสอบเมื่อใช้ไฟล์ กรอบ retrofit ตาราง วิธีที่เป็นไปได้: สร้างไคลเอนต์ติดตั้งใหม่และตั้งค่าใน RestAdapter.Builder (). setClient () สิ่งนี้เกี่ยวข้องกับการแยกวิเคราะห์อ็อบเจ็กต์ Request และส่งคืน json เป็นอ็อบเจ็กต์การตอบสนอง ใช้อินเทอร์เฟซที่มีคำอธิบายประกอบนี้เป็นคลาสจำลองและใช้แทนเวอร์ชันที่ RestAdapter.create () (จะไม่ทดสอบการทำให้เป็นอนุกรม gson) เหรอ? ตามหลักการแล้วฉันต้องการให้เซิร์ฟเวอร์จำลองให้การตอบสนอง json ดังนั้นฉันจึงสามารถทดสอบการทำให้เป็นอนุกรม gson ได้ในเวลาเดียวกัน ตัวอย่างใด ๆ จะได้รับการชื่นชมอย่างมาก

3
ไม่สามารถสร้าง call adapter สำหรับ io.reactivex.Observable
ฉันจะส่งเมธอด get ง่ายๆไปยังเซิร์ฟเวอร์ของฉัน (มันคือแอพ Rails) และรับผลลัพธ์โดยใช้ RxJava และ Retrofit สิ่งที่ฉันทำคือ: อินเทอร์เฟซของฉัน: public interface ApiCall { String SERVICE_ENDPOINT = "https://198.50.214.15"; @GET("/api/post") io.reactivex.Observable<Post> getPost(); } โมเดลของฉันคือ: public class Post { @SerializedName("id") private String id; @SerializedName("body") private String body; @SerializedName("title") private String title; public String getId () { return id; } public String …

4
จะใช้ interceptor เพื่อเพิ่ม Headers ใน Retrofit 2.0 ได้อย่างไร?
ทีมของเราตัดสินใจที่จะใช้Retrofit 2.0และฉันกำลังทำการวิจัยเบื้องต้นเกี่ยวกับเรื่องนี้ ฉันเป็นมือใหม่ของห้องสมุดนี้ ฉันสงสัยว่าจะใช้interceptorเพิ่มส่วนหัวที่กำหนดเองผ่านRetrofits 2.0ในแอป Android ของเราได้อย่างไร มีบทเรียนมากมายเกี่ยวกับการใช้interceptorเพื่อเพิ่มส่วนหัวใน Retrofit 1.X แต่เนื่องจาก API มีการเปลี่ยนแปลงไปมากในเวอร์ชันล่าสุดฉันจึงไม่แน่ใจว่าจะปรับวิธีการเหล่านั้นอย่างไรในเวอร์ชันใหม่ นอกจากนี้ Retrofit ยังไม่ได้อัปเดตเอกสารใหม่ ตัวอย่างเช่นในโค้ดต่อไปนี้ฉันจะใช้Interceptorคลาสเพื่อเพิ่มส่วนหัวพิเศษได้อย่างไร นอกจากนี้วัตถุที่ไม่มีเอกสารChainคืออะไร? เมื่อไหร่จะintercept()เรียก? OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response response = chain.proceed(chain.request()); // How to add extra headers? return response; } }); Retrofit …
96 java  android  retrofit 

9
วิธีการเพิ่มส่วนหัวใน OkHttp request interceptor?
ฉันมีตัวสกัดกั้นนี้ที่ฉันเพิ่มลงในไคลเอนต์ OkHttp ของฉัน: public class RequestTokenInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // Here where we'll try to refresh token. // with an retrofit call // After we succeed we'll proceed our request Response response = chain.proceed(request); return response; } } …

4
การติดตั้งเพิ่มเติมและรับโดยใช้พารามิเตอร์
ฉันพยายามส่งคำขอไปยัง Google GeoCode API โดยใช้ Retrofit อินเทอร์เฟซบริการมีลักษณะดังนี้: public interface FooService { @GET("/maps/api/geocode/json?address={zipcode}&sensor=false") void getPositionByZip(@Path("zipcode") int zipcode, Callback<String> cb); } เมื่อฉันเรียกใช้บริการ: OkHttpClient okHttpClient = new OkHttpClient(); RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Constants.GOOGLE_GEOCODE_URL).setClient(new OkClient(okHttpClient)).build(); FooService service = restAdapter.create(FooService.class); service.getPositionByZip(zipCode, new Callback<String>() { @Override public void success(String jsonResponse, Response response) { ... } @Override …
92 android  get  retrofit 

14
ไม่สามารถสร้าง Call Adapter สำหรับตัวอย่างคลาสได้ง่าย
ฉันใช้ชุดติดตั้งเพิ่ม 2.0.0-beta1 กับ SimpleXml ฉันต้องการดึงทรัพยากรแบบง่าย (XML) จากบริการ REST Marshalling / Unmarshalling the Simple object ด้วย SimpleXML ทำงานได้ดี เมื่อใช้รหัสนี้ (แปลงรูปแบบก่อน 2.0.0 โค้ด): final Retrofit rest = new Retrofit.Builder() .addConverterFactory(SimpleXmlConverterFactory.create()) .baseUrl(endpoint) .build(); SimpleService service = rest.create(SimpleService.class); LOG.info(service.getSimple("572642")); บริการ: public interface SimpleService { @GET("/simple/{id}") Simple getSimple(@Path("id") String id); } ฉันได้รับข้อยกเว้นนี้: Exception in thread …

4
Android Retrofit Parameterized @Headers
ฉันใช้ OAuth และต้องใส่โทเค็น OAuth ในส่วนหัวทุกครั้งที่ส่งคำขอ ฉันเห็น@Headerคำอธิบายประกอบ แต่มีวิธีทำให้เป็นพารามิเตอร์เพื่อให้ฉันส่งผ่านไปได้หรือไม่ นี่คือแนวคิด @Header({Authorization:'OAuth {var}', api_version={var} }) คุณสามารถส่งผ่าน Runtime ได้หรือไม่? @GET("/users") void getUsers( @Header("Authorization") String auth, @Header("X-Api-Version") String version, Callback<User> callback )

1
การติดตั้งเพิ่มด้วย Rxjava Schedulers.newThread () เทียบกับ Schedulers.io ()
สิ่งที่เป็นประโยชน์ต่อการใช้Schedulers.newThread()VS Schedulers.io()ในRetrofitคำขอของเครือข่าย ฉันได้เห็นตัวอย่างมากมายที่ใช้io()แต่ฉันต้องการเข้าใจว่าทำไม ตัวอย่างสถานการณ์: observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())... เทียบกับ observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())... หนึ่งในเหตุผลที่ฉันเห็นคือ - newThread()สร้างเธรดใหม่สำหรับแต่ละหน่วยงาน io()จะใช้เธรดพูล แต่อะไรคืออิทธิพลของข้อโต้แย้งที่มีต่อแอป แล้วมีแง่มุมอะไรอีกบ้าง?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.