可能重复:
不能内螺纹已不叫Looper.prepare()里面的AsyncTask的ProgressDialog创建处理程序
我开发一个Android的服务,尝试获取设备的IP地址每x时间,它comunicate到服务器。 我正在使用:
Netbeans的7.2
Android SDK中
谷歌Android的API 8
SQLite的
我知道有与此相同的问题的一些问题,但他们都不给我解决我的问题。 正如你可以在下面我的代码看,我不是试图访问该服务主线程的UI(好吧,我试过,但我评论了线之后,误差保持不变)。 在另一方面,我使用的AsyncTask,我认为这是适当的方式做到这一点。
这是我服务的主要部分:
public class ArsosService extends Service {
private NotificationManager mNM;
private final Messenger mMessenger = new Messenger(new IncomingHandler());
protected DatabaseUtil dbu = null;
@Override
public void onCreate() {
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
try {
dbu = DatabaseUtility.getInstance(this);
} catch (IOException ex) {
Log.e("Service", ex);
}
Timer timer = new Timer();
timer.schedule(new Checks(), 0, 15000);
}
private class Checks extends TimerTask {
@Override
public void run() {
CheckIpAddress_Task checkIp = new CheckIpAddress_Task();
checkIp.execute();
}
}
// Other methods
private class CheckIpAddress_Task extends AsyncTask<Void, Void, Integer> {
@Override
protected Integer doInBackground(Void... arg0) {
String ipLocal = getLocalIpAddress();
String text = null;
// ipLocal==null means there is no available connection, so we do nothing.
if (ipLocal != null) {
String ipDb = dbu.getLastIP(); // we get the IP saved in the DB.
if (ipDb == null) {
dbu.addProperty("IP", ipLocal); // we save the IP in the DB.
} else if (!ipLocal.equals(ipDb)) {
dbu.setProperty("IP", ipLocal); // we update the IP in the DB.
}
}
if (text != null) {
//showNotification(1, text, ipLocal);
}
return 0;
}
private String getLocalIpAddress() {
String result = null;
// Irrelevant code
return result;
}
}
}
我认为这个问题可能与线程,但我看不到的地方。 任何帮助将不胜感激。
编辑:虽然我已接受的答案是正确的,也许是因为它的一个,我一直在寻找一些更多的信息关于它。 我碰到这个网页我想和大家谁哪天需要更多地了解这个问题分享。 它的作者,Tejas的Lagvankar,解释了有关线程,尺蠖和处理程序非常清晰和易于理解的方式应有尽有。