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

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

123903  9 سال پیش  9 سال پیش
0 0

با سلام خدمت استاد عزیز و  تمامی برنامه نویسان 
همونطور که میدونیم اندروید در 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();
}
 

 

0 0
log هاتون رو به این شکل در بیارین که راحت تر بشه Debugging کرد ;( ()Log.e(TAG, "MalformedURLException: " + e.getMessage (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Morteza  9 سال پیش
+4 0

 پاسخ صحیح

از 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
 
+2 0
در صورتی که جواب مفید بود لطفا با انتخاب گزینه پاسخ صحیح بقیه کاربران رو نیز راهنمایی کنید. (9 سال پیش)

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