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; } }
注释掉的就是写一句话来代替时钟文本的。
谢谢。