树上蜗牛
2015-05-30 14:12
采纳率: 33.3%
浏览 4.1k

Android 客户端与服务器的通信

现在在做一个收货地址的功能。首先进入我的收货地址界面,会请求一个我的地址接口,显示个人的地址列表。然后有一个按钮,是进入增加收货地址界面,把手机号,姓名等信息成功提交给服务器。然后再次请求我的地址接口。为什么新添加的地址有时能请求到,有时又不能请求到

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • 树上蜗牛 2015-05-30 14:18
    已采纳

    你的意思是说提交给服务器之后数据没有马上写入到数据库,存在着一个延时,是吗。服务端应该没问题,ios的做这个功能没有问题

    点赞 打赏 评论
  • guwei4037 2015-05-30 14:15

    这又不是web,有缓存的,有时候能请求,有时候请求不到,肯定是程序问题了。至于是客户端调用还是服务端接口问题,这个需要逐步排查。
    http://blog.csdn.net/chinacsharper/article/details/38386779

    点赞 打赏 评论
  • edouardzyc 2015-05-30 14:29

    诶 这应该是服务端的问题了 , 服务端可能自身有缓存,给客户端的时候用的是缓存,然后新数据存入数据库的时候没有及时和缓存同步

    点赞 打赏 评论
  • blownewbee 2015-05-30 15:05

    把延迟设置的大一些看看是否有改善,看上去是网络不稳定。
    调试下看看输出什么错误。以及服务器也加上日志。

    点赞 打赏 评论
  • O溺水的鱼0 2015-05-30 15:14

    有时候能够请求到服务器端的数据,有时候请求不到数据,肯定是你程序的问题,可以在程序中增加下信息,看看没有请求数据的时候请求返回的状态码是多少,以及返回的内容是什么。

    点赞 打赏 评论
  • 月盡天明 2015-05-31 08:06

    你自己做缓存了?一般来说不是web的话,是没有缓存的。
    估计是你程序里面写的问题。

    点赞 打赏 评论
  • mlys797 2015-05-31 08:38

    你自己做缓存了?一般来说不是web的话,是没有缓存的。
    估计是你程序里面写的问题。

    点赞 打赏 评论
  • qq_28630857 2015-05-31 09:52

    本文介绍Android终端持续扫描AP信息并发送给服务器端的实现。首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路。使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器来连接服务器。其中Android终端通过WIFI连接和PC处于同一局域网。

    1. PC服务器启用ServerSocket

    两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。

    使用ServerSocket对象监听来自客户端的Socket连接

    //创建ServerSocket对象

    //by wayne from www.cnblog.com/dwayne/

    ServerSocket ss = new ServerSocket(30000);

    //监听来自客户端的请求

    while(true){

    Socket s = ss.accept();

    }

    如果没有连接,则将一直处于等待状态。

    当接收到连接请求后,获取消息到输入流,并保存到文件。

    //接收客户端消息

    //by wayne from www.cnblog.com/dwayne/

    BufferedReader in = new BufferedReader(new
    InputStreamReader(client.getInputStream()));

    String str;

    BufferedWriter bw = new BufferedWriter(new FileWriter("D:/ApInfo"+ (i++)
    +".txt"));

    while ((str = in.readLine()) != null) {

    System.out.println(str);

    bw.write(str);

    bw.newLine();

    }

    1. Android终端使用Socket通信

    客户端使用Socket的构造器连接服务器,指定服务器IP和端口号就可以了。

    Socket s = new
    Socket(“192.168.1.100”, 30000);

    这样服务器端的accept()方法就得到响应,从而向下执行,服务器端和客户端就形成了一对互相连接的Socket。再进行通信时就没有服务器和客户端之分了,都是通过输入输出流进行通信。

    详细步骤

    采用Handler和TimerTask来定时扫描AP信息并发送给服务器端。

    TimerTask规定了到达指定的时间所要进行的任务。

    TimerTask task = new TimerTask(){

    public void run() {

    Message message = new Message();

    message.what = 1;

    handler.sendMessage(message);

    }

    };

    handler传递message内容:

    Handler handler = new Handler(){

    public void handleMessage(Message msg) {

    switch (msg.what) {

    case 1:

    // 执行定时器时间到了之后由handler传递的任务

    break;

    }

    super.handleMessage(msg);

    }

    };

    因为需要持续执行扫描任务,所以启用新线程执行定时任务

    //启动单独线程定时向服务器发送AP信息

    //by wayne from www.cnblogs.com/dwayne

    new Thread(){

    @Override

    public void run() {

    // TODO Auto-generated method stub

    timer.schedule(task, 2000,10000); //在2秒后每10秒执行一次定时器中的方法

    }

    }.start();

    接下来扫描AP信息并发送给服务器端,然后将结果保存。

    WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);

    wifiManager.startScan();

    mWifiList = wifiManager.getScanResults();

    由WifiManager说明可知,它可以用于处理已配置的网络,当前连接的网络及AP信息的扫描等情况。

    This class provides the primary API for managing all aspects of
    Wi-Fi connectivity. Get an instance of this class by calling
    Context.getSystemService(Context.WIFI_SERVICE). It deals with several categories
    of items:

    The list of configured networks. The list can be viewed and updated, and
    attributes of individual entries can be modified.

    The currently active Wi-Fi network, if any. Connectivity can be established
    or torn down, and dynamic information about the state of the network can be
    queried.

    Results of access point scans, containing enough information to make
    decisions about what access point to connect to.

    It defines the names of various Intent actions that are broadcast upon any
    sort of change in Wi-Fi state.

    向服务器发送消息:

    socket = new Socket("192.168.1.211",30000);

    //向服务器端发送消息

    PrintWriter out = new PrintWriter( new BufferedWriter( new
    OutputStreamWriter(socket.getOutputStream())),true);

    out.println(message);

    其中message为获取的AP信息

    测试收到的信息格式为:

    SSID: ICIS_LAB, BSSID: 1c:af:f7:9a:65:e4, capabilities:
    [WPA-PSK-TKIP+CCMP], level: -80, frequency: 2437

    点赞 打赏 评论
  • teapot417481432 2015-06-01 03:43

    需要检查服务端返回的json数据,一般返回都是正常的,可能是手机端控件显示更新的问题

    点赞 打赏 评论
  • 首先你要确定服务器存起来了,其次你要确定服务器返回给你的是其读取的之前所有保存的数据,然后你要确定是不是发送了所有数据,最后你要确定收到了所有数据,这些你都可以通过打印信息来查看,来确定是哪里除了错

    点赞 打赏 评论

相关推荐 更多相似问题