需求:实现客户端不断与服务器交互获得实时数据实现:我在后台Service中采用TimerTask类每隔一段时间就去服务器请求数据,请求那块用HttpClient,但发现这样不但应用的响应速度慢,而且应用运行一段时间后就会出现ConnectError的错误,出现错误之后,应用就不再向服务器请求数据。思考:百度查到还可以用Socket和WebService
但是Socket涉及到服务器数据库的安全问题
WebService只写过客户端没写过服务器哪种方式比较好,求大神赐教服务器Android交互
但是Socket涉及到服务器数据库的安全问题
WebService只写过客户端没写过服务器哪种方式比较好,求大神赐教服务器Android交互
2.你请求网络的时候处理了异常没有
3.如果以上都做了,那就检查你的TimerTask写对没有,是不是定时执行的。
你说的抛异常不会再像服务器请求如果有问题的话,基本就出现在上面几点。
另外webservice的调用并不比HttpClient快。
activity中代码//flag用来控制该定时器只启动一次
if (flag) {
Intent intent = new Intent(Main.this, AlamrReceiver.class);//AlamrReceiver是个广播接收器
PendingIntent pi = PendingIntent.getBroadcast(Main.this, 0, intent,0);
AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),(5 * 60 * 1000), pi);
flag = false;
}广播接收器中代码public class AlamrReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, service.class);//service是服务
context.startService(intent);
}
}服务中代码@Override
public void onStart(Intent intent, int startId) {
Thread t = new Thread(new updateRunnable(intent));//启动线程做网络操作
t.start();
onDestroy();
super.onStart(intent, startId);
}注意要在AndroidManifest.xml注册服务和广播
关于安卓客户端与服务器交互方式的选择
07-11 17:23:47.085: W/System.err(3526): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
07-11 17:23:47.085: W/System.err(3526): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
07-11 17:23:47.085: W/System.err(3526): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-11 17:23:47.095: W/System.err(3526): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-11 17:23:47.095: W/System.err(3526): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-11 17:23:47.095: W/System.err(3526): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-11 17:23:47.095: W/System.err(3526): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-11 17:23:47.095: W/System.err(3526): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-11 17:23:47.095: W/System.err(3526): at com.hch.util.ConnectServerUtil.functionfornet(ConnectServerUtil.java:122)
07-11 17:23:47.095: W/System.err(3526): at com.hch.util.ConnectServerUtil.connect(ConnectServerUtil.java:74)
07-11 17:23:47.095: W/System.err(3526): at com.hch.util.ConnectServerUtil.connect(ConnectServerUtil.java:46)
07-11 17:23:47.095: W/System.err(3526): at com.hch.service.LocalService.getChuanganqiByuname(LocalService.java:164)
07-11 17:23:47.095: W/System.err(3526): at com.hch.service.LocalService$Task.run(LocalService.java:78)
07-11 17:23:47.095: W/System.err(3526): at java.util.Timer$TimerImpl.run(Timer.java:284)
请问该怎么解决?