بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

deprecate شدن HttpClient و اجر نشدن کد استاد در اموزش 11

مدیریت گفتگو
ابراهیم 11 سال پیش
آخرین تغییر: 9 سال پیش

سلام دوستان در ابتدای بخش 11 اموزش استاد یک ابجکت از کلاس HttpClient می سازند که بنده وقتی در حال پیاده سازی آن کد بودم اروری دریافت کردم مبنی بر اینکه HttpClient دپریکیت شده است.حال چند سوال برای بنده پیش آمده است که ممنون می شوم راهنمایی بفرمایید.

1-اگر از یک کلاس که دپریکیت شده است (یعنی گوگل توصیه می کند که از ان استفاده نکنیم) استفاده کنیم چه مشکلی به وجود می آید؟

2-با سیرچ کردن می توان راه حل سوالی مانند سوال بالا را یافت ولی ایا در خود سایت گوگل قسمتی وجود دارد که کلاس های دپریکیت شده به همراه علت و به همراه جایگزین را یک جا  آورده باشد؟

3-تا انجا که استاد می خواهند مقدار statusLine ریخته شده در یک متغیر از نوع int به نام کد را با استفاده از Log نمایش دهند هم بنده کد ها را مانند استاد وارد کردم ولی ارور می گیرم و برنامه اجرا نمی شود ایا ممکن است دلیل این ارور این باشد که از کلاسی که  deprecate شده است استفاده می کنم؟

ممنون بابت راهنمایی

نظرات

مصطفی  11 سال پیش
کلاسی که deprecate میشود قابل استفاده است. چون اگر بخواهند کلا فاتحه یک کلاس را بخوانند فکر کنه یه شبه اندروید سقوط می کنه به قعر بدبختی چون همه ی برنامه ها کرش می کنن
ابراهیم 11 سال پیش
در هر صورت در همان ابتدای اموزش یازده که استاد مقدار http status code را می خواهند در Log نشان دهند من ارور دریافت می کنم در یک پروژه ی دیگر هم همین مراحل را طی کردم منتها مجددا ارور دریافت کردم. ممنون می شوم دوستان راهنمایی کنند.
Vahid 11 سال پیش
شما پروژه استاد رو import کنید ببینید آیا بازم ارور میگرید؟! اگر نگرفتید، بدونید بدون شک یک جای کار رو اشتباه کردید!
ابراهیم 11 سال پیش
سلام ایمپورت کردم باز هم ارور گرفتم .
دوست عزیز این کلاس ها دیگه خیلی قدیمی شده. از okhttp یا retrofit استفاده کن. البته اینا برای rest api هست فک کنم. از volly هم میتونی استفاده کنی فعلا تا راه بیفتی ولی volly هم خیلی عالی نیست
amirhossein1376 10 سال پیش
نخیر volly دپریکیت نشده . توی گیت هاب یه کپی از اون گذاشته بودن که اون دیگه آپدیت نمیشه وگرنه از خود volly میتونید استفاده کنید ولی retrofit هم خیلی عالیه

پاسخ‌ها 12

ابراهیم 11 سال پیش

دوستان کسی نیست من رو راهنمایی کنه؟

نظرات

ابراهیم 11 سال پیش
من کد استاد رو هم در اندروید استودیو ایمپورت کردم اما ان هم اجرا نشد
Stark 10 سال پیش
ابراهیم جان ،من کد استاد رو توی اندروید استودیو ایمپورت میکنم اجرا میشه و مشکل نداره..ولی وقتی خودم تو یه پروژه جدید کدهای استادو کپی میکنم به Http ها گیر میده ،در صورتی که از API8 استفاده میکنم...پیدا نکردی راه حلو؟
ابراهیم 11 سال پیش

اشکالی که کد استاد را نمی توانستم درست اجرا کنم به دلیل ادرس HttpGet بود بعد از اصلاح اجرا شد .دوستان اگر اطلاعاتی در مورد کلاس جایگزین HttpClient دارند لطفا به بنده هم اطلاع دهند . ممنون

نظرات

amirhossein1376 11 سال پیش

آقا کلا تو اندروید استودیو میزنم HttpClient هیچی نمیاره راهنمایی کنید اگه چیزی میدونین خیلی برام واجبه

نظرات

ابراهیم 11 سال پیش
این مشکل همچنان برای من است.کد استاد را اگر ایمپورت کنم اجرا می شه و لی تنها همین یک کد که دپریکیت شده را وقتی تو اندروید استودیو وارد می کنم موقع ران گرفتن ارور میده .
نه اصلا عجیب نیست من فک کنم بدونم ارورتون چیه ارور شما مربوط میشه به Main Thread که برای حل اون باید کد استاد رو توی ترد بزاری و ترد رو استارت کنی. اگه مشکلتون حل نشد بگید تا راهنماییتون کنم
ابراهیم 11 سال پیش
ممنون رامین جان تست می کنم مزاحمت می شم.
masih 11 سال پیش

سلام مشکله خاصی نیست من هم همین مشکل را داشتم تو اندروید استودیو که کلا کلاس های Http را ایمپورت نمیکرد راه حل اینطوریه:

نسخه appcompact را بیار پایین مشکل حل میشه چون نسخه 23 Http را ساپورت نمیکنه

نظرات

amirhossein1376 11 سال پیش
من این تغییرو ایجاد کردم درست نشد
ابراهیم 11 سال پیش
ممنون بابت راهنمایی تست می کنم خبر می دم فقط یک نکته ای شما اطلاعاتی در مورد کلاس جایگزین شده به جای کلاس Http ندارید؟
کاشی زاده 11 سال پیش

HttpClient جز پکیج Apache هست و ربطی به گوگل و اندروید نداره ، اما در API 22 اندروید از Apache 4.3 استفاده شده ، که در این ورژن از Apache دیگه از HttpClient پشتیبانی نمیشه و Depricate شده . منبع

حالا طبق چیزی که خود Apache گفته باید از HttpClientBuilder و یا از CloseableHttpClient استفاده کنید .

راه دیگه هم اینکه از نسخه 21 به قبل اندروید رو در پروژه به کار ببرید .

نظرات

Stark 10 سال پیش
من نسخه قبل از 21 رو هم بکار گرفتم ولی درست نشد
Stark 10 سال پیش
اقا اصلا اینارو بیخیال!..یه راهی پیشنهاد بدید که از اندروید استودیو بشه وصل شد به سرور و دیتا بیس و اینا... دمتون گرم :)
ابراهیم 10 سال پیش
اگه منظورتون این هست که در اپلیکیشن یک دیتابیس انلاین داشته باشیم و اطلاعات از سرور دریافت شود که این موارد در اموزش ها پوشش داده شده.
rad 10 سال پیش
میشه اینو یکم بیشتر توضیح بدید با مثال
amirhossein1376 10 سال پیش

دیدم تاپیک بالا اومده گفتم این قسمتو بگم راه حلشو

دوستان میتونید این خط رو به gradle برنامتون اضافه کنید

dependencies {
...
  compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

نظرات

محمدحسن 9 سال پیش
داداش من این کارو کردم ولی فایده نداشت اصلا خیلی مسخره هستش وقتی استاد و اونایی که این مشکلو میدونن حاضر نیستن خیلی راحت و صریح جواب ماها رو بدن
120814 9 سال پیش
این کد رو به gradle اضافه کن حتما درست میشه android { useLibrary 'org.apache.http.legacy' }
120814 9 سال پیش
در android studio
MarAnd 10 سال پیش

من هم تازه رسیدم به قسمت بازیابی سرور ولی با HTTPClient مشکل دارم . اولش این دستور رو اضافه کردم  =>    'useLibrary 'org.apache.http.legacyولی خطایی که میده از این نوع هست =>  unable to start activity componentinfo و بعدش این دلیل رو میاره =>  Caused by:  android.os.NetworkOnMainThreadException

به همین دلیل یک Thread تعریف کردم و کدها رو توش نوشتم و حالا وقتی اجرا می کنم توی LOG کدی مربوط به HTTP Status Code هست رو بهم عدد 405 نشون میده . چه راه حلی برای رفعش وجود داره ؟ اضافه کردن یه سری دستورات رو توی gradle رو هم امتحان کردم ولی نتیجه نداد. 

نظرات

A 10 سال پیش

برای حل این مشکل بعد از setContent در اکتیویتی مورد نظر این کد رو وارد کنید:

 if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}

نظرات

MarAnd 10 سال پیش
ممنون ولی بازهم 405 رو نشون میده :(
Krypton 10 سال پیش

سلام یک بار توی یکی از تاپیک ها گفتم الانم میگم دوباره

در نسخه ی Android Studio 1.4 و به بعدش دیگه از متد های Http گوگل پشتیبانی نمیگنه، و شما باید از وبسرویس هایی نظیر Volley استفاده بکنید

برای کانکت شدن به اینترنت از RequestQueue باید استفاده کنید

 

نظرات

MarAnd 10 سال پیش
شما درست میگین ولی خونده بودم که دیپریکیت شدن دلیل بر قابل استفاده نبودن نیست !.
Krypton 10 سال پیش
بله صحیحه اما من دیگه نتونستم با اضافه کردن دپندسیاش ازش استفاده کنم چون کلا اون دنپندسیو نداشت
MarAnd 10 سال پیش
اکی شد مال من ولی سپاسگزارم چون باعث شد با volley هم اشنا بشم .
Reza 10 سال پیش

این خط رو به gradle اضافه کن ، تو بخش android زیر buildToolsVersion . 

useLibrary 'org.apache.http.legacy'

. بعدشم این چند خط کد رو به ActivityMain پروژت اضافه کن مشکلت حل میشه.

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

نظرات

silent scream 10 سال پیش

دوستان توجه کنید که دیپرکت شدن یک متد به خاطر مشکلاتی هست که داشته، درسته قابل استفاده هست ولی به هیچ وجه پیشنهاد نمیشه استفاده بشه. 

نظرات

nero 360 9 سال پیش

به نظرم از کلاس HttpUrlConnection  برای جایگزین استفاده کنید

نظرات

120814 9 سال پیش
دوست عزیز یه نمونه کد کاملشو قرار میدی؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .