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

متوقف شدن برنامه در هنگام استفاده از HttpUrlConnection

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

با سلام خدمت استاد عزیز و  تمامی برنامه نویسان 
همونطور که میدونیم اندروید در Api  های جدید ترش از HttpClient  پشتیبانی نمیکنه 
به همین خاطر بنده از HtmlUrlConnection  رو جایگزینش کردم.در ارتباط با وب سرویسی که روی localHost قرار داره مشکلی ندارم ولی در ارتباط با یک وب سرویس از طریق اینترنت برنامه unfortunately has stopped  میشه.اگر دوستان لطف کنن یه بررسی کنم ممنون میشم
اینم کد برنامم:

  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {


URL url = new URL("http://www.thunder3000.000webhostapp.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Log.i("Log",connection.getResponseCode()+"");



InputStream stream=connection.getInputStream();
TextView txtView=(TextView)findViewById(R.id.txtHello);

BufferedReader reader=new BufferedReader(new InputStreamReader(stream));

String line="";
StringBuilder builder=new StringBuilder();
while((line=reader.readLine())!=null)
{
builder.append(line);
}
txtView.setText(builder.toString());

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

});
thread.start();
}
 

 

نظرات

124867 9 سال پیش
log هاتون رو به این شکل در بیارین که راحت تر بشه Debugging کرد ;( ()Log.e(TAG, "MalformedURLException: " + e.getMessage

پاسخ‌ها 1

مشاهده پاسخ صحیح
Morteza 9 سال پیش

 پاسخ صحیح

از sdk 23 به بعد از httpClient پشتیبانی نمیشه شما میتونید از sdk 22 استفاده کنید یا از okHttp کنید البته با اضافه کردن تکه کد زیر در فایل gradle میتونید از httpClient حتی در sdk23 به بعد نیز استفاده کنید. (خودم توی پروژم دارم استفاده میکنم و کاملا جواب میده)

 android {
    useLibrary 'org.apache.http.legacy'
}
 
 

اما کد شما مشکل اش اینه که دارید توی Thread ایی غیر از Main Thread با UI کار میکنید و TextView رو setText میکنید.که برای این کار باید از handler استفاده کنید.

new Handler().post(new Runnable() {
@Override
public void run() {
txtView.setText(builder.toString());
}
});
 
 

از android.os.Handler استفاده کنید.

import android.os.Handler
 

نظرات

Morteza 9 سال پیش
در صورتی که جواب مفید بود لطفا با انتخاب گزینه پاسخ صحیح بقیه کاربران رو نیز راهنمایی کنید.

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