[java] كيفية الاتصال بخدمة RESTful على الويب من Android؟


Answers

اكتشفت مؤخرا أن مكتبة طرف ثالث - مربع التحديثية يمكن القيام بالمهمة بشكل جيد للغاية.

تحديد نقطة نهاية REST

public interface GitHubService {
   @GET("/users/{user}/repos")
   List<Repo> listRepos(@Path("user") String user,Callback<List<User>> cb);
}

الحصول على خدمة ملموسة

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .build();
GitHubService service = restAdapter.create(GitHubService.class);

استدعاء نقطة النهاية REST

List<Repo> repos = service.listRepos("octocat",new Callback<List<User>>() { 
    @Override
    public void failure(final RetrofitError error) {
        android.util.Log.i("example", "Error, body: " + error.getBody().toString());
    }
    @Override
    public void success(List<User> users, Response response) {
        // Do something with the List of Users object returned
        // you may populate your adapter here
    }
});

تعالج المكتبة تسلسل json و deserreaization لك. يمكنك تخصيص التسلسل وإلغاء التسلسل أيضًا.

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .registerTypeAdapter(Date.class, new DateTypeAdapter())
    .create();

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .setConverter(new GsonConverter(gson))
    .build();
Question

لقد كتبت خدمة REST على شبكة الإنترنت في Netbean IDE باستخدام جيرسي الإطار وجافا.

لكل طلب يحتاجه المستخدم لتوفير اسم مستخدم وكلمة مرور ، أعلم أن هذه المصادقة ليست من أفضل الممارسات (باستخدام أمر curl مثل: curl -u username:password -X PUT http://localhsot:8080/user ) .

الآن أريد الاتصال بخدمة REST على الويب من خلال Android Class.

كيف أفعل ذلك؟

لدي فئة Android تستخدم DefaultHttpClient و CredentialUsernameAndPassword ، ولكن عندما أقوم بتشغيلها في Eclipse ، فأحيانًا ما أحصل على استثناء من وقت التشغيل أو استثناء SDK.




استخدمت OkHttpClient للاتصال بخدمة ويب مريحة. انه بسيط جدا.

OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
                .url(url)
                .build();

Response response = httpClient.newCall(request).execute();
String body = response.body().string()



هنا مكتبتي التي قمت بإنشائها لمكالمات Webservice البسيطة ،

يمكنك استخدام هذا عن طريق إضافة تبعية سطرية واحدة -

compile 'com.scantity.ScHttpLibrary:ScHttpLibrary:1.0.0'

هنا هو مظاهرة استخدام.

https://github.com/vishalchhodwani1992/httpLibrary




ربما ksoap أو ربما كنت قد استخدمت بالفعل من قبل ولكن هناك واحد آخر يسمى ksoap ومدهش جدا .. ويشمل أيضا المهلة ويمكن تحليل أي خدمة الويب SOAP القائمة بكفاءة. لقد أجريت أيضًا بعض التغييرات لتناسب تحليلي .. ابحث عنه




توقف عن كل ما كنت تفعله! :)

تنفيذ عميل RESTful كخدمة وتفويض عناصر الشبكة المكثفة إلى مكون مستقل عن النشاط: خدمة.

شاهد هذا الفيديو الثاقب http://www.youtube.com/watch?v=xHXn3Kg2IQE حيث يشرح فيرجيل دوبجانشي منهجيته لهذا التحدي ...




Links