ورود

View Full Version : مشکل در ارتباط با سرور



Shut Down
شنبه 31 خرداد 1393, 20:18 عصر
سلام
من میخوام از طریق برنامه با سرور ارتباط برقرار کنم و ....
این کد

String url = "http://192.168.1.105/test/login.php";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("em", "a='" + eda.getText().toString() + "'"));
params.add(new BasicNameValuePair("pw", "b='" + edb.getText().toString() + "'"));


String result = Webservice.readUrl(url, params);
ولی وقتی این کد اجرا میشه این ارور میاد و به

String result = Webservice.readUrl(url, params);
و
HttpResponse response = client.execute(method);

در webService گیر میده
ارور :

06-21 22:58:55.207: E/AndroidRuntime(1682): java.lang.RuntimeException: Unable to start activity ComponentInfo{pr0gram3r72.Hogwarts/pr0gram3r72.Hogwarts.ActivityLogin}: android.os.NetworkOnMainThreadException



کد webservice
package pr0gram3r72.Hogwarts;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity ;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;




public class Webservice {


public static String readUrl(String url, ArrayList<NameValuePair> params) {
try {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(url);


if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
}


HttpResponse response = client.execute(method);


InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);


return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}


return null;
}




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


}

parvizwpf
شنبه 31 خرداد 1393, 22:16 عصر
نمیتونه فایل رو ببینه. مطمئنید آدرس رو درست دادید؟

Shut Down
شنبه 31 خرداد 1393, 22:20 عصر
شما کد رو قشنگ یک نگاه بندازید
بله

Shut Down
شنبه 31 خرداد 1393, 22:26 عصر
ارور جدید :

06-21 22:58:55.207: E/AndroidRuntime(1682): java.lang.RuntimeException: Unable to start activity ComponentInfo{pr0gram3r72.Hogwarts/pr0gram3r72.Hogwarts.ActivityLogin}: android.os.NetworkOnMainThreadException

parvizwpf
یک شنبه 01 تیر 1393, 15:23 عصر
فکر کنم بخاطر استفاده از نت ورک و ui بکجا هست. شما تمام اون کدهای مریوز به ارتباط با وب سرویس رو در کلاس AsyncTask پیاده کنید . چون تردهای ui از پروسسهای نت جدا بشه.

mehdie19
دوشنبه 02 تیر 1393, 13:36 عصر
parvizwp کاملا درست میگه
خود گوگل اجازه نمیده شما کار هایی که زمان بر هستند .از قبیل ارتباط برقرار کردن با اینترنت رو در داخل ترد اصلی انجام بدید
شما حتما باید یک ترد جدید با استفاده از کلاس AsyncTask بسازید.

البته یه راه دیگه هم داره که گوگل برای توسعه دهنده فقط پیشنهاد میکنه . و شما نباید با اون راه برنامتون رو در داخل مارکت ها منتشر کنید. فک کنم نیازی به گفتنش نیست

parvizwpf
دوشنبه 02 تیر 1393, 13:44 عصر
البته یه راه دیگه هم داره که گوگل برای توسعه دهنده فقط پیشنهاد میکنه . و شما نباید با اون راه برنامتون رو در داخل مارکت ها منتشر کنید. فک کنم نیازی به گفتنش نیست

چه روشی هست؟

mehdie19
دوشنبه 02 تیر 1393, 13:55 عصر
"در پاسخ به پست بالا"
راه دیگر که اصلا توصیه نمی کنم.
کد زیر رو در Oncreat بزنید



if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().buil d();
StrictMode.setThreadPolicy(policy);
}

در مورد دانلود کردن یه عکس از اینترنت تستش کردم و کار کرد.
احتمالا در این مورد هم کار خواهد کرد .

parvizwpf
دوشنبه 02 تیر 1393, 14:17 عصر
در واقع داره چیکار میکنه؟

mehdie19
دوشنبه 02 تیر 1393, 14:30 عصر
در واقع داره چیکار میکنه؟

خود اندروید این اجازه رو نداده که شما کار های زمان بر رو در داخل ترد اصلی انجام بدید(که حالا خودش یه سری دلایل جداگانه داره)
حالا برنامه نویس این وسط می خواد که فقط دانلود شدن یه عکس رو چک کنه که با چه کدی اونو انجام بده
با اون دو سه خط به راحتی یه کاری میکنه که دیگه اندروید بهش گیر نده که باید در ترد جداگانه باشه

این کد هم درواقع این کار رو برای شما امکان پذیر میکنه
خودم دقیقا داکیمنتش گوگل رو نخوندم ولی از روی کد میشه فهمید
که" امکان نوشتن کار های زمان بر در ترد اصلی " در ورژن های اس دی کی 9 به پایین بوده و بعد از 9 دیگه این کار رو غیر فعال کردن
که با کد زیر شما دوباره اونو فعال میکنی.