access数据查询显示_实现正常异常的网关查询和显示 数据的传输协议制定 android ssm...

首先是要确定app这边发送的http请求是什么,然后服务器怎么处理,然后返回什么数据。

请求: /wgnum 然后需要参数吗?不需要

服务器怎么处理: 由前面的数据库的讨论,我们知道,这里要返回的是正常运行的网关的号码,即wg1,wg2 .然后怎么把数据封装在json里面呢?

放在msg里,然后是我想着直接 wg1!wg2#wg3 这样分割,然后到了安卓这边直接以感叹号和井号进行分割,然后取出来。#号之前是好的,之后的就是坏的。先以#号进行分割,然后再用!号做单个分割。 嗯,这是我能想到的办法了 。 大家由想法的欢迎交流讨论。

这样,我们的准备工作就ok了。

然后先把服务器的dao层sql什么的都加上去吧,然后先用浏览器进行测试,然后再拿app进行实验。

先是mapper的xml文件的修改,然后是dao层的Java文件,然后是service层,然后是controller层。(感觉自己就是在零零星星地补洞。。)

这里由于我的工程经验不足,所以每写完dao层后需要测试一下,不然出问题就不好了。但是感觉没什么大问题,所以暂时不写测试程序。

首先是实现正常和异常的网关号码按上面的格式返回:

这里我就偷懒了,直接在usermapper写代码了,按理说一般都是一个表对应一个操作文件的,我就不搞那么麻烦了,反正就那回事。

下面是xml增加的:

	<select id="selectNormal"  resultType="java.lang.String">
		select wgname from first_table where normal= "1"
	</select>

	<select id="selectUnNormal"  resultType="java.lang.String">
		select wgname from first_table where normal= "0"
	</select>

由于不需要输入参数,或者你把0,1作为输入也许,反正我是直接把 parameterType去掉了。 然后由于返回的可能是同一字段的多个数据,但是这里 resultType还是使用string来接收。 但是注意:对应的Java文件那里使用 :List<String>来接收,不然就会报

Expected one result (or null) to be returned by selectOne(), but found: 2 这个错误

	public List<String> selectNormal();

	public  List<String> selectUnNormal();

然后是service层,在这里我就把数据拼装好了。这里还直接在ssm目录里写了个main函数测试一下字符串的拼装。平常操作得比较少。如下

public class aa {
    static List<String> name = new ArrayList<>(Arrays.asList("xxx","yyy","zzz"));
    public static void main(String[] args) {
        StringBuffer result=new StringBuffer();

        for(String i:name){
            result.append(i).append("#");
        }
        result.deleteCharAt(result.length()-1);
        System.out.println(result);
    }
}

输出: xxx#yyy#zzz

ok

然后就开始正式写service层:

public String getWg(){
		StringBuffer result=new StringBuffer();
		List<String> list1= userMapper.selectNormal();
		for(String i:list1){
			result.append(i).append("#");
		}
		result.deleteCharAt(result.length()-1);
		result.append("!");
		List<String> list2=userMapper.selectUnNormal();
		for(String i:list2){
			result.append(i).append("#");
		}
		result.deleteCharAt(result.length()-1);
		return  result.toString();
	}

这里就拿stringbuffer来弄了,什么效率之类得就不考虑了,先搞完再说。这个是线程安全的。

然后controller层我就写得简单了。在知乎的代码区加了@就很麻烦,不得不吐槽这里的文本编辑还是不尽如人意。。。

@RequestMapping(value = "/wgnum", method = RequestMethod.GET)
@ResponseBody
@Transactional
public Msg findWg(){
System.out.println("进入查询网关"+new Date());
String wg=IUserService.getWg();
if(wg!=null){
return Msg.success().add("meg", wg);
}else {
return Msg.fail().add("meg", "查询网关失败");
}
}

最后用浏览器访问得到如下图:

7e43296c44c92bfd105debb3585ab876.png

嗯,这样就很完美了。然后就可以去写app的界面,然后发出http请求,然后解析json数据了。

设置布局方式的时候,

f38ce48e7d2486cfd1acdfbfda8bf10c.png

这个居中功能可能不行,这个时候要考虑一下前面的宽度高度的设置问题,要生效的话,得都使用match_parent。

表格布局里button不能居中,一直在左边。

 <TableRow     android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >

这样就ok了,直接控制table得长度和宽度和gravity即可。

这里要注意由于本地的ip地址断网后会随时更改,所以每次都要记得更改安卓代码里面的ip地址喔。

第一次测试的时候忘记取出对象的msg了,结果截图如下:

eeb38a1122d416975e1f0f43040ef189.png

然后修改后如下所示:(中间专门放一个textView进行调试的)

01401f4279eb81a2677b68ab1001020b.png

这样就达到我们的效果了。

代码如下:activity的

public class LoginSuccessActivity extends AppCompatActivity {
    private Handler handler;
    private String result = "";
    private TextView logText;
    private Button button1;
    private Button button2;
    private Button button3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_success);
        logText=findViewById(R.id.txtOne);
        button1=findViewById(R.id.Button1);
        button2=findViewById(R.id.Button2);
        button3=findViewById(R.id.Button3);
        final List<Button> buttonList=new ArrayList<>();
        buttonList.add(button1);
        buttonList.add(button2);
        buttonList.add(button3);

        new Thread(new Runnable() {
            public void run() {
                send();	//发送文本内容到Web服务器
                Message m = handler.obtainMessage(); // 获取一个Message
                handler.sendMessage(m); // 发送消息
            }
        }).start(); // 开启线程

        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (result != null) {
                    Gson gson=new Gson();
                    Msg message=gson.fromJson(result,Msg.class);
                    if(message.code==100){
                        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
                        String wgmsg=message.extend.meg;


                        String[] allString=wgmsg.split("!");
                        String[] normalString=allString[0].split("#");
                        String[] unnormalString=allString[1].split("#");

                        logText.setText(result+" "+normalString.length+" "+unnormalString.length);
                        int i=0;
                        for(Button button :buttonList){
                            if(i<normalString.length){
                                button.setText(normalString[i]);
                                button.setBackgroundColor(Color.GREEN);
                            }else if(i>=normalString.length && i<normalString.length+unnormalString.length) {
                                button.setText(unnormalString[i-normalString.length]);
                                button.setBackgroundColor(Color.RED);
                            }else{
                                break;
                            }
                            i++;
                        }

                    }else{
                        logText.setText("error number");
                    }

                }
                super.handleMessage(msg);
            }
        };
    }

    public void send() {
        String target="";
        target = "http://175.10.207.22/wgnum";	//要访问的URL地址
        URL url;
        try {
            url = new URL(target);
            HttpURLConnection urlConn = (HttpURLConnection) url
                    .openConnection();	//创建一个HTTP连接
            InputStreamReader in = new InputStreamReader(
                    urlConn.getInputStream()); // 获得读取的内容
            BufferedReader buffer = new BufferedReader(in); // 获取输入流对象
            String inputLine = null;
            //通过循环逐行读取输入流中的内容
            while ((inputLine = buffer.readLine()) != null) {
                result += inputLine + "n";
            }
            in.close();	//关闭字符输入流对象
            urlConn.disconnect();	//断开连接
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

xml的:这里用的表格布局

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    tools:context=".LoginSuccessActivity"
    >

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="buttuon1"
    android:background="#FF009688"
        android:id="@+id/Button1" />
    </TableRow>

    <TableRow     android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >
        <TextView
            android:id="@+id/txtOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="" />
    </TableRow>

    <TableRow     android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="buttuon2"
        android:background="#FF009688"
        android:id="@+id/Button2" />
    </TableRow>

    <TableRow     android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >
        <TextView
            android:id="@+id/txtTwo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="" />
    </TableRow>
    <TableRow     android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >
        <Button
            android:id="@+id/Button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#FF009688"
            android:text="buttuon3" />
    </TableRow>

</TableLayout>

这里出现了一个小小的问题,记录一下,就是gson解析json数据的时候,由于这里嵌入了数据,如下,这是修改后的json类,原来是没有 public Extend extend; 属性的。然后我 String wgmsg=message.extend.meg; 调用的时候,就一直报 expected class or package 这个错误,就很尴尬,想想发现自己直接调用对象就很尴尬。。。

21327deb01379fcc5e389ac9cac7892e.png

然后感觉这里字符串处理比较多,如果对Java的字符串处理不太熟悉的话可能不太理解得过来。百度一下就好。

然后我们的目的就达到了。后面就是再进行http请求,然后实现终端数据的查询了。

源码: 安卓端的:

https://github.com/jackhbr/--stm32f4-/blob/master/android%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20main.zip​github.com

服务器端:

https://github.com/jackhbr/--stm32f4-/blob/master/ssm%20%E6%9C%8D%E5%8A%A1%E5%99%A8main.zip​github.com

欢迎交流讨论。(写得非常菜。。自己知道。。以后慢慢补)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值