I have a special problem with some devices.
my problem is that : I am developing an app with an app widget that app and app widget must be connected to a server. app connect to server perfectly in devices but the app widget cannot connect to the server in some device.
App widget provider class :
public class WidgetOne extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
ComponentName componentName = new ComponentName(context, WidgetOne.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
for (int widgetId : allWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_weather);
Intent intent = new Intent(context, WidgetOne.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if(!Prefe.builder().getBool("isFirstRun",true)){
showLoading(context, remoteViews);
new getResponseAsyncWidget1(context, remoteViews).execute();
}
remoteViews.setOnClickPendingIntent(R.id.root_refresh_widget, pendingIntent);
remoteViews.setOnClickPendingIntent(R.id.img_refresh_wedget_1, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
Networking class:
public class Networking {
OkHttpClient okHttpClient;
public Networking() {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.callTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build();
}
public String get(String url){
Request request = new Request.Builder()
.url(url)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
return "error";
}
}
Asynctask class :
private class getResponseAsyncWidget1 extends AsyncTask<String, Integer, String> {
String url = "//url"
RemoteViews remoteViews;
Context context;
public getResponseAsyncWidget1(Context context, RemoteViews remoteViews) {
this.context = context;
this.remoteViews = remoteViews;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... strings) {
Networking networking = new Networking();
String response = networking.get(url);
return response; // return "error" in some devices Although the internet is connected
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if (response.matches("error")) {
// do something
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetOne.class), remoteViews);
}
else {
// do something
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetOne.class), remoteViews);
}
}
}
my problem is that response
in some device return "error"
Although the internet is connected