我的程序流程是
- 活动开始服务。
- 服务启动 TimerTask 以获取 html
- 当 TimerTask 获取新的 html 时, sendBroadcast();
- 广播类接收“字符串 html”
- onReceive 被调用并在 Activity 中启动 change(html) 方法。
- change(String html) 方法将 html 放入活动中的 textview。
我的问题是 5:“活动实例为空”
我的代码是
public class MainActivity extends Activity {
static MainActivity Iinstance;
private String ServiceName = myService.class.getCanonicalName();
ServiceStatus servicestatus = new ServiceStatus();
static Handler handler = new Handler();
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setSoftInputMode(
LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.textView1);
Iinstance = this;
Button B;
//there is clicklistener for B to start service.
}
class AA{
void A(String html){
tv.setText(html);
}
}
和服务代码是
public class myService extends Service {
//fields
public int onStartCommand(Intent i, int flags, int startId) {
//code to start TimerTask.
}
//register the receiver.
CancelReceiver receiver = new CancelReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction("MY_ACTION");
registerReceiver(receiver, intentFilter);
return START_REDELIVER_INTENT;
}
class task extends TimerTask{
@Override
public void run() {
try {//get html from webviewClient
handlers.post(new Runnable(){
@Override
public void run() {
//webView load URL.I have two doubts around this.
WebView webView = new WebView(myService.this);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new HogeWebViewClinet());
webView.addJavascriptInterface(new WebViewLogger(), "webViewLogger");
String Url = (String) map.get("URL");
webView.loadUrl(Url);
}
});
}
}
class HogeWebViewClinet extends WebViewClient {
@Override public void onPageFinished(WebView view, String url) {
//throw the html from webview to "class WebViewLogger"as "String str"by loading javascript.
view.loadUrl("javascript:window.webViewLogger.log(document.documentElement.outerHTML);");
}
}
class WebViewLogger {
public void log(String str) {
Intent broadcastIntent = new Intent();
broadcastIntent.putExtra("Status", str);
broadcastIntent.setAction("MY_ACTION");
sendBroadcast(broadcastIntent);
}
}
}
然后去广播课。公共类接收器扩展广播接收器{
String serviceResult = null;
@Override
public void onReceive(Context arg0, Intent intent) {
AA aa = MainActivity.Iinstance.new AA(); //threw error in this line.
aa.a(intent.getStringExtra(Status);
}
就这样。
为什么“MainActivity.Iinstance.new AA();”为空?
我猜为什么活动为空
- 因为 webview 不是 setcontentview。所以现在,没有看到 webview,工作背景。它对我有好处。但。不可见的 webview 覆盖了所有的 UI 和活动 UI 被扔掉了。
- 因为 Handler 没有正确使用。不可见的 webview 使用 Handler?
毕竟,我无法解决这个问题,但是我尝试了很多解决方案。
请帮我。
谢谢。