2 xiaoxiaomao123098 xiaoxiaomao123098 于 2015.05.30 22:12 提问

Android 客户端与服务器的通信

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

10个回答

xiaoxiaomao123098
xiaoxiaomao123098   2015.05.30 22:18
已采纳

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

xiaoxiaomao123098
xiaoxiaomao123098 回复guwei4037: 已经调试过,提交数据给服务器之后服务器返回的响应码为true之后再去请求的地址接口
2 年多之前 回复
guwei4037
guwei4037 仔细检查客户端调用接口部分的代码,做测试。
2 年多之前 回复
wgw335363240
wgw335363240   2015.05.30 23:14

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

xiaoxiaomao123098
xiaoxiaomao123098 不是不能请求到服务器的数据,只是有时请求不到最新添加的信息。提交给服务器返回的状态码为true,请求服务器返回的状态码也是true
2 年多之前 回复
crazy1235
crazy1235   Ds   Rxr 2015.05.31 16:06

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

guwei4037
guwei4037   Ds   Rxr 2015.05.30 22:15

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

edouardzyc
edouardzyc   2015.05.30 22:29

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

xiaoxiaomao123098
xiaoxiaomao123098 做这个功能的ios是没有任何问题,像这种发送请求之后又请求一般要怎么处理
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.30 23:05

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

xiaoxiaomao123098
xiaoxiaomao123098 你是说提交给服务器成功之后,直接用Thread.sleep()让程序休眠一段时间。客户端程序没有报错
2 年多之前 回复
mlys797
mlys797   2015.05.31 16:38

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

qq_28630857
qq_28630857   2015.05.31 17: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
teapot417481432   2015.06.01 11:43

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

q3733353520
q3733353520   2015.06.03 17:26

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

Csdn user default icon
上传中...
上传图片
插入图片