Widget的一个小问题。
我并不想做一个时钟的小组件,我想把网上的一句话来代替时钟文本,所以我写好了一个类,用于爬网上的一些句子,但是我在Service里面实例化来取这个字符串的时候并没有成功,很是奇怪,我想问一下为什么呢?时钟的组件运行是没有问题的,而一句话运行的时候没有结果。
下面是封装的网络请求类:
package com.example.ssc.oneget;
import android.util.Log;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by SSC on 2017/9/16.
*/
public class GetContent {
String content;
public String getContentValue(String url) {
OkHttpClient mClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(url)
// .addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
// .addHeader("Cookie","ICIBA_HUAYI_COOKIE=1; UM_distinctid=15e88d42c6e4a5-032081ce67094e-5d4e211f-1fa400-15e88d42c6f3b8; PHPSESSID=5su1hqc2rqfmm027eqou523pp0; testnews_iciba_user=15; CNZZDATA1256573685=1319828842-1505532611-http%253A%252F%252Fwww.so.com%252F%7C1505532611")
// .addHeader("Cache-Control","max-age=0")
.build();
Call call = mClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Log.i("2333---result", result);
Document document = Jsoup.parse(result);
Elements elements = document.select("strong[style*=\"color: #0b5394;\"]");
int size = elements.size();
content = elements.get(0).text().toString();
Log.i("2333---content+ size", content + " " + size);
// for (int i = 0; i <size ; i++) {
//
// }
}
});
return content;
}
}下面是Service类:
package com.example.ssc.oneget;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.RemoteViews;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by SSC on 2017/9/16.
*/
public class MyService extends Service {
private Timer mTimer;
private SimpleDateFormat mFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
updateViews();
}
},0,1000);
}
private void updateViews() {
//时钟小组件
String time = mFormat.format(new Date());
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);
remoteViews.setTextViewText(R.id.textView1, time);
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName componentName = new ComponentName(getApplicationContext(), WidGetProvider.class);
manager.updateAppWidget(componentName,remoteViews);
// //每日一句
// GetContent getContent = new GetContent();
// int num = (int) (Math.random() * 300 + 1);
// String url = "http://www.dailyenglishquote.com/page/" + num + "/";
// String content = getContent.getContentValue(url);
// RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);
// remoteViews.setTextViewText(R.id.textView1, content);
// AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
// ComponentName componentName = new ComponentName(getApplicationContext(), WidGetProvider.class);
// manager.updateAppWidget(componentName,remoteViews);
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer = null;
}
}注释掉的就是写一句话来代替时钟文本的。
谢谢。