У меня особая проблема с некоторыми устройствами.
Моя проблема заключается в следующем: я разрабатываю приложение с виджетом приложения, которое должно быть подключено к серверу. приложение отлично подключается к серверу на устройствах, но виджет приложения не может подключиться к серверу на каком-либо устройстве.
Класс провайдера виджета приложения:
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);
}
}
Класс сети:
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);
}
}
}
Моя проблема в том, что response
в некоторых устройствах возвращает "error"
Хотя inte rnet подключен