Retrofit 2 বেস url থেকে হোস্টনামের পরে অক্ষরগুলি সরিয়ে দেয়


121

আমি একটি রেস্টস্টুল এপিআই অ্যাক্সেস করতে রেট্রোফিট ব্যবহার করছি। বেস ইউআরএলটি হ'ল:

http://api.example.com/service

ইন্টারফেসের জন্য এটি কোড:

public interface ExampleService {
    @Headers("Accept: Application/JSON")
    @POST("/album/featured-albums")
    Call<List<Album>> listFeaturedAlbums();
}

এবং এইভাবে আমি অনুরোধ পাঠিয়ে প্রতিক্রিয়াটি গ্রহণ করি:

new AsyncTask<Void, Void, Response<List<Album>>>() {

        @Override
        protected Response<List<Album>> doInBackground(Void... params) {
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://api.example.com/service")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

            ExampleService service = retrofit.create(ExampleService.class);

            try {
                return service.listFeaturedAlbums().execute();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Response<List<Album>> listCall) {
            Log.v("Example", listCall.raw().toString());
        }
    }.execute();

আমি যে লগ পাই তা অদ্ভুত জিনিস:

ভি / উদাহরণ ﹕ প্রতিক্রিয়া {প্রোটোকল = HTTP / 1.1, কোড = 404, বার্তা = পাওয়া যায় নি, url = http://api.example.com/album/featured-albass }

এখানে কি হচ্ছে?


আপনি কি সমস্যা সমাধান করতে পারেন? আমিও একই সমস্যার মুখোমুখি হচ্ছি। এবং আমি সঠিক উত্তরটি চেষ্টা করার পরেও আমি সর্বদা অনর্থক হয়ে যাই
পার্থ আঞ্জারিয়া

উত্তর:


283

রেট্রোফিট 2 একই নিয়ম ব্যবহার করে একটি <a href="">would।

/আপনার আপেক্ষিক ইউআরএল নেতৃস্থানীয় রিট্রোফিটকে বলে যে এটি হোস্টের একটি পরম পথ। এখানে একটি উপস্থাপনা থেকে একটি উদাহরণ এখানে দেখিয়েছি:

এখানে চিত্র বর্ণনা লিখুন

ভুল URL টি নোট করুন যা নীচে সমাধান করা হয়েছিল।

শীর্ষস্থানীয় অপসারণ করে /, URL টি তখন আপেক্ষিক হয়ে যায় এবং সেই পথ অংশগুলির সাথে একত্রিত হবে যা বেস URL এর অংশ। উপস্থাপনায় সংশোধন করা হয়েছে চূড়ান্ত ইউআরএল এখন সঠিক:

এখানে চিত্র বর্ণনা লিখুন

আপনার উদাহরণে /বেস ইউআরএলটিতে আপনার কোনও অনুসরণ নেই । আপনি সম্ভবত একটি যুক্ত করতে চান যাতে আপেক্ষিক পাথগুলি একটি ভাইবোন না হয়ে তার উপরে সমাধান করা যায়।


12
এই নতুন URL টির রেজোলিউশন কেন বেশি উপকারী তা আমি সত্যিই বুঝতে পারি না। আপনি এগুলি থেকে যা কিছু পেতে পারেন তা হ'ল লুক্কায়িত ত্রুটি (যেমন এই প্রশ্ন দ্বারা নির্দেশিত), এবং পাল্টা স্বজ্ঞাত ফলাফল ( http://api.example.com/service+ /album/featured-albumsএটি নয় http://api.example.com/album/featured-albums)। এবং এই নীরব ত্রুটিটি আপনি /বেস url এর শেষে বা API URL এর সামনের অংশে রাখেন তা ব্যতীত অন্য কিছুই থেকে আসে না । এই ছাঁটাই কার্যকর যে কোনও ব্যবহারের ক্ষেত্রে আছে?
এপিকপান্ডাফোরস


11
উপস্থাপনাটি দেখার পরে এটি আমার কাছে বোধগম্য হয় তবে ওয়েবসাইটে ছোট্ট একটি নোট যুক্ত করা দুর্দান্ত হবে। কী ভুল হচ্ছে তা জানতে আমার কয়েক মিনিট সময় লেগেছে।
অ্যালবার্ট ভিলা ক্যালভো

8
@JakeWharton কিভাবে আমি কি @POSTকরতে baseUrl(যে কোন যোগ ছাড়া pathSegment? গুলি উদাহরণ: baseUrlহয় http://api.example.com/album/featured-albumsএবং আমি আমার চান @POSTকলে যেতে http://api.example.com/album/featured-albums। (বেস হিসাবে একই URL টি) @POST("") ছোঁড়ার একটিjava.lang.IllegalArgumentException: Missing either @POST URL or @Url parameter.
ZakTaccardi

17
ব্যবহার করুন@Post(".")
জ্যাক ওয়ার্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.