آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

aminaryan  8 سال پیش  7 سال پیش
+5 0

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

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

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

+3 0
نه، بخش‌]ایی که منسوخ شده هم باز میتونید استفاده کنید، فقط تگ deprecate میخوره کدتون. همچنین با جستجو میتونید جایگزین‌هاشون رو پیدا کنید. (8 سال پیش)
+1 0
باشه ممنون. (8 سال پیش)
+4 0
لطفا عنوان تاپیک رو عوض کنید ، منسوخ شدن یک کلاس یا متد در اندروید صرفا هیچ ربطی به منسوخ شدن آموزش نداره ، شما توی آموزش ارتباط برقرار کردن رو یاد میگیرید به همراه جزئیات ، پس اگر کلاس و یا متدی از اندروید منسوخ شده باشه ماهیت آموزش رو زیر سوال نمیبره ، بلکه شما باید جایگزینی رو برای اون پیدا کنید و طبق آموزش ها پیش برید (8 سال پیش)
+2 0
ببخشید. شما درست میفرمایید. اصلاح شد. (8 سال پیش)
+1 0
اگر از اندروید استودیو استفاده میکنید داخل فایل gradle داخل تگ android کد useLibrary 'org.apache.http.legacy' رو استفاده کنید (8 سال پیش)
+1 0
چرا کلا از وولی استفاده نمیکنین راحت و مفید (8 سال پیش)
0 0
سلام atf جان. این کد رو که میذارم تو gradle خطا میده ! میگه اصلا متد use library() رو پیدا نمیکنه !!! (7 سال پیش)
 برای این سوال 13 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Rabbit  8 سال پیش
+14 0

 پاسخ صحیح

جای 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;
    }

 

0 0
میتونید از HTTPURLConnection هم استفاده کنید . (8 سال پیش)
+1 0
ممنون. خیلی ازتون متشکرم. (8 سال پیش)
+1 0
دوست عزیز این کدی که من اینجا کپی کرده بودم یک اشکال کوچکی داشت. همین الان حین کار متوجه شدم. اینی که الان گذاشتم کاملا درست کار میکنه. (8 سال پیش)
0 0
(8 سال پیش)
0 0
URL منسوخ شده و توی اندروید استودیو ارور میده (8 سال پیش)
+1 0
یک راه دیگه استفاده از کتابخونه هایی مثل volley و OkHttp برای ارتباط با سرور و دریافت اطلاعات هست. توصیه من okhttp هست. آموزش OkHttp: لینک آموزش volley: لینک (7 سال پیش)
0 0
داداش اون قسمت httprespone رو نگفتی چکار کنیم ک مثل استاد بتونیم یک لاگ بگیریم و کد رو داشته باشیم (7 سال پیش)
0 0
این کد ، هیچ چیزی رو برنمیگردونه !! یعنی عملا یه string خالی بهم میده !! (7 سال پیش)
0 0
مشکل ام برطرف شد. این کد دقیقا معادل کدهای استاد برای من جواب داد. ممنون Rabbit جان . (7 سال پیش)
0 0
قطعه کد زیر چرا ارور میده ؟ (7 سال پیش)
0 0
قطعه کد زیر چرا ارور میده ؟ (7 سال پیش)
پاسخ به سوال 
aminaryan  8 سال پیش
+1 0

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

 .append("n");
+1 0
اگه اشتباه نکنم باید "n\" باشه نه "n" که کارش اینه اطلاعاتو تو یه سطر جدید اضافه میکنه (8 سال پیش)
پاسخ به سوال 
رامین پارسه  8 سال پیش
+1 0

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

 

پاسخ به سوال 
رامین پارسه  8 سال پیش
0 0

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

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

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

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

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

 .append("n");

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

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

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

ممنون

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

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

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

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

پاسخ به سوال 
aminaryan  8 سال پیش
0 0

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

 InputStream in= conn.getInputStream();
0 0
سلام دوستان من برای ارتباط با سرور بجای تابع HttpClient از روش جناب rabbit استفاده کردم. اما روی این خط از کد به IOException میخوره و همینطور دو تا سه دقیقه هم زمان میبره تا اکتیویتی رو لود کنه! راه حل چیه؟کسی میتونه به من کمک کنه؟ پیشاپیش از توجهتون سپاسگذارم. (8 سال پیش)
+1 0
از کتابخونه volley استفاده کن . خیلی سریع و با تعداد خط کد کمتر میتونی اطلاعات ارسال کنی و دریافت کنی (8 سال پیش)
0 0
یعنی درواقع اتصال برقرار نمیشه و زمان اتصال منقضی میشه.. wamp server هم انلاین هست. (8 سال پیش)
+1 0
سلام دوست عزیز، دلیلش این هست که شما باید این عملیات را در تردی غیر از ترد UI انجام بدید. می تونید یا از یک ترد جدید استفاده کنید یا از تابع AsyncTask که دارای امکانات جالبی هست استفاده کنید (8 سال پیش)
پاسخ به سوال 
امین رضا  8 سال پیش
0 0

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

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

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

        StrictMode.ThreadPolicy policy = new StrictMode.
                ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy); 
+1 0
راه حل به جز این داره که این کد رو اضافه نکنیم ؟ (8 سال پیش)
پاسخ به سوال 
konda  8 سال پیش
+1 0

سلام دوستان
من یه پروژه ای جهت دانلود ،  توی اندروید 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
علتش چیه؟

0 0
سلام چون نسخه ی Debaug رو دارید ران میکنید، باید قبل از اجرا بری به تنظیمات اپلیکیشنتون و پرمیژن رو بصورت دستی بدید (8 سال پیش)
0 0
چجوری؟ همون مجوز اعطا شده؟؟؟؟ (8 سال پیش)
پاسخ به سوال 
hadighorbani  8 سال پیش
+1 0

سلام

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

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

پاسخ به سوال 
محمدحسن  7 سال پیش
0 0

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

پاسخ به سوال 
وحید گروسی  7 سال پیش
0 0


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;
}

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