PDA

View Full Version : مشکل در ارتباط با اینترنت هنگامیکه از dataی سیم کارت استفاده می کنم



EhsanTC
شنبه 23 اردیبهشت 1396, 13:04 عصر
سلام به همه

من یه تیکه کد دارم که م یخوام اتصال به وب سرویس مورد نظرم را تست کنم. برای این کار اول یه کلاس نوشتم با استفاده از HttpUrlConnection و سپس با استفاده از لایبراری Volley
مشکل من اینه که وقتی از اینترنت wifi استفاده می کنم همه چی درست کار میکنه ولی وقتی از اینترنت سیم کارت استفاده می کنم همش خطا میده.
مثلا قسمتی که از لایبراری Volley استفاده می کنه این پیغام خطا را میده:

com.android.volley.NoConnectionError: java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)


کل کدهام هم اینه:
[ private void checkMethod2(String address, final Activity activity) {
InternetChecker checker = new InternetChecker(new InternetConnectivityListener() {
@Override
public void onInternetConnected() {
Toast.makeText(activity.getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show();
}

@Override
public void onInternetDisconnected() {
Toast.makeText(activity.getApplicationContext(), "Disonnected", Toast.LENGTH_SHORT).show();
}

@Override
public void onDestinationAddressInvalid() {
Toast.makeText(activity.getApplicationContext(), "Invalid address", Toast.LENGTH_SHORT).show();
}
},
activity.getApplicationContext(), address);
checker.check();
}

private void checkMethod1(String address, final Activity activity) {
StringRequest postReq = new StringRequest(Request.Method.POST,
address,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(" SIB", response);
Toast.makeText(activity.getApplicationContext(),
"Response from server",
Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Log.d(" SIB", error.toString());

Toast.makeText(activity.getApplicationContext(),
error.toString(),
Toast.LENGTH_LONG).show();
}
});
postReq.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
// Add the request to the queue
Volley.newRequestQueue(activity.getApplicationCont ext()).add(postReq);
}


public static class InternetChecker extends AsyncTask<Void, Void, String> {
public static boolean isWorking = false;
InternetConnectivityListener listener;
Context context;
String address;

public InternetChecker(InternetConnectivityListener listener, Context c, String address) {
this.listener = listener;
context = c;
this.address = address;
}

@Override
protected void onPreExecute() {
isWorking = true;
}

@Override
protected String doInBackground(Void... params) {
boolean res = true;
int INTERVAL = 1000;

ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERV ICE));
res &= connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConne cted();

if (res == false)
return "false";

try {
URL url = new URL(address);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
connection.setRequestProperty("Accept-Encoding", "");
//connection.setRequestProperty("connection", "close");
//connection.setRequestMethod("POST");
//connection.setDoInput(true);
//connection.setDoOutput(true);
//System.setProperty("http.keepAlive", "false");
connection.connect();
int code = connection.getResponseCode();

if (code == 200) {
res &= true;
} else {
res &= false;
}
} catch (Exception e) {
res &= false;
}

return "res";
}

@Override
protected void onPostExecute(String param) {
if (param.equals("true"))
listener.onInternetConnected();
else if (param.equals("false"))
listener.onInternetDisconnected();
else if (param.equals("server_unreachable"))
listener.onDestinationAddressInvalid();

isWorking = false;
}
}

بهزاد اندیشمند
یک شنبه 24 اردیبهشت 1396, 16:08 عصر
در قسمت onCreate() برنامتون این کد رو اضافه کنید :

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

EhsanTC
دوشنبه 25 اردیبهشت 1396, 12:33 عصر
سلام
ممنون از جواب
کردم ولی باز هم کار نداد :ناراحت:

بهزاد اندیشمند
دوشنبه 25 اردیبهشت 1396, 15:06 عصر
سلام
ممنون از جواب
کردم ولی باز هم کار نداد :ناراحت:

قبل از ایجاد هرنوع ارتباط http request از این خطوط کد استفاده کنید که ظاهرا کامنت کردین :

connection.setRequestProperty("connection", "close");

System.setProperty("http.keepAlive", "false");