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

منسوخ شدن کلاس httpresponse

مدیریت گفتگو
aminaryan 10 سال پیش
آخرین تغییر: 8 سال پیش

من امروز داشتم قسمت 12 آموزش های اندروید رو نگاه میکردم. کد ها رو که وارد اندروید استودیو کردم(httpclient) دیدم اصلا همچین کلاسی وجود نداره. توی اکلیپس هم تست کردم بازم نشد. به نظر میاد این کلاس در api23 منسوخ شده چون اصلا نشد که نشد. حالا باید چی کار کنم. لطفا کمکم کنید. اگه جایگزین مناسبی داره لطفا بهم یاد بدید. ممنون.

***بروزرسانی***

حالا get status code رو چجوری بگیرم؟

نظرات

Rabbit 10 سال پیش
نه، بخش‌]ایی که منسوخ شده هم باز میتونید استفاده کنید، فقط تگ deprecate میخوره کدتون. همچنین با جستجو میتونید جایگزین‌هاشون رو پیدا کنید.
Criss 10 سال پیش
لطفا عنوان تاپیک رو عوض کنید ، منسوخ شدن یک کلاس یا متد در اندروید صرفا هیچ ربطی به منسوخ شدن آموزش نداره ، شما توی آموزش ارتباط برقرار کردن رو یاد میگیرید به همراه جزئیات ، پس اگر کلاس و یا متدی از اندروید منسوخ شده باشه ماهیت آموزش رو زیر سوال نمیبره ، بلکه شما باید جایگزینی رو برای اون پیدا کنید و طبق آموزش ها پیش برید
aminaryan 10 سال پیش
ببخشید. شما درست میفرمایید. اصلاح شد.
atf 10 سال پیش
اگر از اندروید استودیو استفاده میکنید داخل فایل gradle داخل تگ android کد useLibrary 'org.apache.http.legacy' رو استفاده کنید
خواست خدایی 10 سال پیش
چرا کلا از وولی استفاده نمیکنین راحت و مفید
Dolphin Tech 9 سال پیش
سلام atf جان. این کد رو که میذارم تو gradle خطا میده ! میگه اصلا متد use library() رو پیدا نمیکنه !!!

پاسخ‌ها 13

مشاهده پاسخ صحیح
Rabbit 10 سال پیش

 پاسخ صحیح

جای httpclient از URLConnection استفاده میشه.

این کدها معادل کدهای آموزش‌ها هستن و همون کارو میکنن:

     public static String getContents(String url) {
        String contents = "";

        try {
            URLConnection conn = new URL(url).openConnection();

            InputStream in = conn.getInputStream();
            contents = convertInputStreamToString(in);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return contents;
    }

    private static String convertInputStreamToString(InputStream inputStream) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder builder = new StringBuilder();

            String line = "";

            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

            return builder.toString();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

 

نظرات

IIVII 10 سال پیش
میتونید از HTTPURLConnection هم استفاده کنید .
aminaryan 10 سال پیش
ممنون. خیلی ازتون متشکرم.
Rabbit 10 سال پیش
دوست عزیز این کدی که من اینجا کپی کرده بودم یک اشکال کوچکی داشت. همین الان حین کار متوجه شدم. اینی که الان گذاشتم کاملا درست کار میکنه.
سعید 10 سال پیش
URL منسوخ شده و توی اندروید استودیو ارور میده
Rabbit 9 سال پیش
یک راه دیگه استفاده از کتابخونه هایی مثل volley و OkHttp برای ارتباط با سرور و دریافت اطلاعات هست. توصیه من okhttp هست. آموزش OkHttp: لینک آموزش volley: لینک
محمدحسن 9 سال پیش
داداش اون قسمت httprespone رو نگفتی چکار کنیم ک مثل استاد بتونیم یک لاگ بگیریم و کد رو داشته باشیم
Dolphin Tech 9 سال پیش
این کد ، هیچ چیزی رو برنمیگردونه !! یعنی عملا یه string خالی بهم میده !!
Dolphin Tech 9 سال پیش
مشکل ام برطرف شد. این کد دقیقا معادل کدهای استاد برای من جواب داد. ممنون Rabbit جان .
aminaryan 10 سال پیش

میشه بگید این کد زیر چی کار میکنه؟ ممنون.

 .append("n");

نظرات

amirhossein1376 10 سال پیش
اگه اشتباه نکنم باید "n\" باشه نه "n" که کارش اینه اطلاعاتو تو یه سطر جدید اضافه میکنه
رامین پارسه 10 سال پیش

الحاق میکنه یعنی نسبت میده n رو یا اضافه میکنه n vرو به ...

 

نظرات

رامین پارسه 10 سال پیش

توی این مثال یعنی اضافه میکنه مقدار n رو به StringBuilder

نظرات

aminaryan 10 سال پیش
یعنی باید برش دارم برای کار خودم؟
رامین پارسه 10 سال پیش
نه عزیزم چرا برداری گفتی کدش یعنی چی من توضیح دادم فقط الان مشکلت چیه دقیقا این کد درسته
رامین پارسه 10 سال پیش
try { while ((line = reader.readLine()) != null) { sb.append(line).append("n"); } الان توی این قسمت کد داره میگه هر لاینی که میخونی اگر نقیض پوچه یا همون یعنی اگر وجود داره اضافه کن به StringBuilder
رامین پارسه 10 سال پیش
ببین شما اصلا احتیاجی نیست این کد رو تغییر بدی فقط یاید یه url یا همون آدرس به این متود پاس بدی
رامین پارسه 10 سال پیش
اما اگر قرار از یک جدول دیتای سرور چیزی بگیری باید پارسش کنی با جیسون که استانداردش اینه که این کار رو توی کلاس دیگه انجام بدی این کدی که دوستمون نوشته دقیقا مشابه کدیه که خودت بالاتر نوشتی همون کاررو میکنه
رامین پارسه 10 سال پیش
دوسته من عجله نکن و ناامید نشو ما همه اینجوری بودیم بگر توی اینترنت how to فلان in android هزارتا مثال پیدا میکنی ولی توصیه میکنم اول درس های گذشته رو مسلط شو بعد جلو برو توی برنامه نویسی نباید عجله کنی فقط عقب میوفتی در ضمن هر چیزی که یاد میگیری سعی کن یک پروژه ازش درست کنی توی ساخت پروژه هاست که ما میفهمیم مشکلاتمون کجاست به مثال های ساده اکتفا نکن هرچی به ذهنت میرسه بساز
aminaryan 10 سال پیش

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

 while((line = reader.readLine())!=null){
                sb.append(line).append("n");}

من مشکلم اینه که دقیقا همین کد رو استاد نوشتن ولی دیگه 

 .append("n");

نداره به این صورت:

 while((line = reader.readLine())!=null){
                sb.append(line);}

من میخواستم بدونم این کدی که اضافه شده چی هست. میدونم اضافه میکنه ها فقط نمیدونم برای چی هست.

ممنون

نظرات

رامین پارسه 10 سال پیش
از اسم متود که مشخصه داره ولیوهایی که توی استیریم هست رو به استرینگ تبدیل میکنه استریم برگردونه فارسی دقیقی نداره اما نقشش تقریبا اینه که میره و از نت چیزی رو با خودش میاره ما اینجا یا StringBuilder یک ظرف استرینگ میسازیم و ولیوهای داخل استریم رو داخل line میریزیم و در آخر line هارو یه StringBuilder پاس میدیم
رامین پارسه 10 سال پیش
همچنین ما یک reader ایجاد کردیم تا بتونیم محتویات داخل stream رو بخونیم و داخل لاین بریزیم
رامین پارسه 10 سال پیش
در ضمن یکی از دوستان بالا اشاره کرد اون n نیست n\ هستش یعنی یک سطر برو پایین مثل اینتر در pc
رامین پارسه 10 سال پیش
مثلا میشه الف با اون علامت اومد پایین حالا ب و ...
رامین پارسه 10 سال پیش
فقط اگر با این علامت ها آشنا نیستی یه تذکر حتما دقت کن اون n\ نه n/ یعنی بک اسلش n
aminaryan 10 سال پیش
آهان پس یعنی این n\ هست دیگه نه n؟ درسته؟
aminaryan 10 سال پیش

آهان پس یعنی این n\ هست نه n دیگه؟ درسته؟

نظرات

Rabbit 10 سال پیش
آره احتمالا اشتباهی \ رو یادم رفته. چون این کد رو از پروژه جدیدم کپی کردم احتمالا یک اشتباهی کردم موقع کپی کردن کدها. دلیل وجودش هم اینه که توی شرط while هر دفعه یک خط رو از بافر میخونه و میخواد بریزه توی sb. از اونجایی که هر دفعه line شامل یک خط از اطلاعات بافر ما یعنی reader هست باید توی sb هم بگه که بعد از خوندن اطلاعات برو خط بعد. برای همین یک n\ به انتهای رشته اضافه میکنه.
aminaryan 10 سال پیش

بسیار خب. حالا برای httpResponse چی کار کنم؟ ممنونم که کمکم میکنید.

نظرات

aminaryan 10 سال پیش

روی این خط از کد زیر ارور NetworkOnMainThreadException میده. دلیلش چیه؟

 InputStream in= conn.getInputStream();

نظرات

Sara.gh 10 سال پیش
سلام دوستان من برای ارتباط با سرور بجای تابع HttpClient از روش جناب rabbit استفاده کردم. اما روی این خط از کد به IOException میخوره و همینطور دو تا سه دقیقه هم زمان میبره تا اکتیویتی رو لود کنه! راه حل چیه؟کسی میتونه به من کمک کنه؟ پیشاپیش از توجهتون سپاسگذارم.
سعید کاظمی 10 سال پیش
از کتابخونه volley استفاده کن . خیلی سریع و با تعداد خط کد کمتر میتونی اطلاعات ارسال کنی و دریافت کنی
Sara.gh 10 سال پیش
یعنی درواقع اتصال برقرار نمیشه و زمان اتصال منقضی میشه.. wamp server هم انلاین هست.
امین 10 سال پیش
سلام دوست عزیز، دلیلش این هست که شما باید این عملیات را در تردی غیر از ترد UI انجام بدید. می تونید یا از یک ترد جدید استفاده کنید یا از تابع AsyncTask که دارای امکانات جالبی هست استفاده کنید
امین رضا 10 سال پیش

سلام آره کلاس منسوخ شده (ولی خب میشه استفاده کرد) و البته بهتر است که از روش دوستمون Rabbit استفاده بشه.

و البته نکته مهم اینکه در api های 4 به بعد اندروید اجازه نمیده که توی thread اصلی مستقیما کانکشن بزنی و اگه دوستان همین کد را امتحان کنند، در عین اینکه درسته ولی برنامه خطا میده و بسته میشه. (مشکلی که برای من بود)

هر چند که توصیه نمیشه ولی فعلا برای اینکه بتونید آموزشها را ادامه بدید میتونید این کد را در متد onCreate قرار بدید و بطور مستقیم اون کدها را اجرا کنید:

        StrictMode.ThreadPolicy policy = new StrictMode.
                ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy); 

نظرات

سعید کاظمی 10 سال پیش
راه حل به جز این داره که این کد رو اضافه نکنیم ؟
konda 10 سال پیش

سلام دوستان
من یه پروژه ای جهت دانلود ،  توی اندروید 6 اجرا کردم، پیغام logcat این خطا اومد

W/System: ClassLoader referenced unknown path: /system/framework/tcmclient.jar
W/System: ClassLoader referenced unknown path: /system/framework/com.qualcomm.qti.GBAHttpAuthentication.jar

اندورید 2 تا 5 خوب کار می کنه، جز 6
علتش چیه؟

نظرات

Krypton 10 سال پیش
سلام چون نسخه ی Debaug رو دارید ران میکنید، باید قبل از اجرا بری به تنظیمات اپلیکیشنتون و پرمیژن رو بصورت دستی بدید
konda 10 سال پیش
چجوری؟ همون مجوز اعطا شده؟؟؟؟
Krypton 10 سال پیش

سلام

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

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

نظرات

محمدحسن 9 سال پیش

urlارور میده چجوری برطرفش کنم؟چگونه کتابخانه volleyو غیره را استفاده کنم؟

نظرات

وحید گروسی 8 سال پیش


public static String getContents(String url) {
String contents = "";

try {
final URLConnection conn = new URL(url).openConnection();
new Thread(new Runnable() {
@Override
public void run() {
InputStream in = conn.getInputStream();
}
}).start();
contents = convertInputStreamToString(in);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return contents;
}

private static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();

String line = "";

while ((line = reader.readLine()) != null) {
builder.append(line);
}

return builder.toString();
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

نظرات


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