بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
کرش کردن برنامه هنگام استفاده از کد HttpResponse
سلام
من دارم طبق آموزش های سرور استاد پیش میرم اما با این کدها مقدار satus code رو بهم نشون نمیده و برنامه کرش میکنه درحالی که استاد با همین کدها بدون مشکل عدد ۲۰۰ رو دریافت میکنه
مشکل کار من کجاست ؟
package app.servertest.com.servertest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;
public class Main extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet("https://www.google.fr/?gws_rd=cr,ssl&ei=sMw7WJv9FITUaeGEtJAP");
try {
HttpResponse response = client.execute(method);
int code = response.getStatusLine().getStatusCode();
Log.i("LOG", "Code: " + code);
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
+2
0
سلام.اگه از API 10 به بعد،استفاده می کنید،برای اجرای کدهای ارتباط با سرور باید از ترد جداگانه استفاده کنید(الان شما دارین کداتونو توی ترد UI اجرا می کنید که همونطور که گفتم از API 10 به بعد این کار شدنی نیست.). (9 سال پیش)
0
0
میشه بشتر توضیح بدین دقیقا باید چیکار کنم؟
ممنون (9 سال پیش)
+1
0
خواهش می کنم.خب باید همه کداتونو بذارین داخل یه ترد.تاحالا از ترد استفاده نکردین؟ (9 سال پیش)
0
0
نه متاسفانه هیچ تجربه ای از ترد ندارم :(( (9 سال پیش)
+1
0
باشه،الان جواب رو براتون می نویسم،فقط اگه از قابلیت های جدید اندروید تو پروژتون استفاده نمی کنید،برای شروع مقدار compileSdkVersion رو ،روی 9 بذارین و دوباره پروژه رو اجرا کنید.(البته این راه حل خوبی نیست اما برای شروع بد نیست :) ). (9 سال پیش)
0
0
HttpClient تو نسخه های جدید وجود نداره باید چه کار کرد؟ (9 سال پیش)
0
0
راه های مختلفی وجود داره،یکیش استفاده از HttpURLConnection هست و یکیشم،استفاده از کتابخانه هایی مثل Volley , OkHttp ,Retrofit. (9 سال پیش)
0
0
اگه میخواید از http client استفاده کنید میتونید این کد رو به گریدل اضافه کنیدcompile 'org.jbundle.util.osgi.wrapped4.1.2' (9 سال پیش)
+1
0
میشه درباره ی نحوه ی اضافه کردنش به گریدل بیشتر توضیح بدید آخه من اضافه کردم باز هم موفق نشدم (9 سال پیش)
0
0
اگه خاطرتون باشه وقتی وارد اندروید استودیو میشید که تیکه از کد رو از توی گریدل پاک میکنید و sync رو میزنید این تیکه کدی که براتون نوشتم دقیقا همون قسمتی که که کد را پاک کردین اضافه کنید و sync رو بزنید.همین. البته فلفل شکنتون هم روشن باشه. (9 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
مشاهده پاسخ صحیح
پاسخ به سوال
sami
9 سال پیش
0
0
پاسخ صحیح
من جواب رو براتون نوشتم،اما سعی کنید تا جایی که می تونید،اول خودتون تلاش کنید تا به جواب برسین،اگه نشد اونوقت از دیگران سوال کنید.
البته اینو به خاطر خودتون گفتم،چون اگه این رویه رو ادامه بدین،پیشرفت چندانی توی برنامه نویسی نخواهید داشت و به قول استاد صرفا به یه ماژول بند،تبدیل می شین :)
Thread mThread = new Thread(new Runnable() {
@Override
public void run() {
//////////////////////////////// کدهای خودتون
HttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet(
"https://www.google.fr/?gws_rd=cr,ssl&ei=sMw7WJv9FITUaeGEtJAP");
try {
HttpResponse response = client.execute(method);
int code = response.getStatusLine().getStatusCode();
Log.i("LOG", "Code: " + code);
/////////////// کدهای لازم برای تغییر رابط کاربری ،البته به جای این متد می تونید از هندلر هم استفاده کنید.
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(
getApplicationContext(),
"اگه خواستین بعد از دریافت اطلاعات از سرور،UI رو تغییر بدین،کداتونو به جای این Toast بنویسید.",
Toast.LENGTH_LONG).show();
}
});
/////////////// کدهای لازم برای تغییر رابط کاربری ،البته به جای این متد می تونید از هندلر هم استفاده کنید.
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
/////////////////////////////// کدهای خودتون
}
});
mThread.start();
این کدا مشکلتون رو حل می کنه،اما بهتره بجای استفاده از ترد از AsyncTask استفاده کنید،این دفعه بهتره خودتون روش استفاده از AsyncTask رو یاد بگیرین :)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .