类似失物寻找的App-Android+php+mysql的初次探索

概述:在Android-app端:发布简短数据,php接口与android数据接收/发送,php将数据用sql语句插入数据库

关键字:Android,php,mysql,BottomNavigationItemBar

遇到的坑:android+mysql直接尝试用jdbc遇到了坑,使用AndroidStudio去完成这个任务总是会报错,在查找很长时间之后,发现Android+jdbc+mysql,最好在eclipse上尝试,如果AndroidStudio有成功可以分享给大家

1.BottomNavigationItemBar的使用

2.mysql数据库创建

3.php文件

4.Android-app端提交数据获取数据以及Json解析的逻辑代码

5.某些注意的地方

(代码大概是2016-12-15前后,某些框架技术更新太快,仅做整理参考之用)

-------------------------------------------------------------------------------------------------------------------------

1.BottomNavigationItemBar

这个东西菜鸡小王认为略牛逼,好厉害的很,奈何没有找到一篇详细介绍的,偶尔遇到,用了一下,真是牛。

Bottom Navigation:底部导航,Google在自己推出的Material design中增加了Bottom Navigation导航控制,这样的话稍稍有一点统一的感觉,那么这个效果是什么样的,和QQ的底部导航基本一致或者说是一毛一样啊,而且还有各种效果设置

1.1在Gradle Scripts - build.gradle(Module:app) 的dependencies{中添加

    compile 'com.ashokvarma.android:bottom-navigation-bar:1.0.0'

1.2布局

<com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:id="@+id/bottom_navigation_bar"
        />


1.3逻辑代码中与BottomNavigationBar相关代码

1.3.1

private BottomNavigationBar bottom_bar;

	bottom_bar= (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        bottom_bar.addItem(new BottomNavigationItem(R.mipmap.show,getString(R.string.show)))
                .addItem(new BottomNavigationItem(R.mipmap.find,getString(R.string.find)))
                .addItem(new BottomNavigationItem(R.mipmap.look,getString(R.string.look)))
                .setFirstSelectedPosition(1)
                .initialise();

亲们可以通过bottom_bar.  来看一看有哪些功能函数,以上只是部分,addItem就是加导航块,setFirstSelectedPosition就是设置默认导航在哪个位置

还有设置背景颜色,动作等多种函数

当然记住最后一个一定要有.initialise();

1.3.2

设置选择监听函数

bottom_bar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
            @Override
            public void onTabSelected(int position) {
                //txt_main.setText(theNames.get(position));
                fm = getSupportFragmentManager();
                ft = fm.beginTransaction();
                switch (position){
                    case 0:
                        theShow=new ShowFragment();
                        ft.replace(R.id.mainFragment,theShow);
                        break;
                    case 1:
                        theFind=new FindFragment();
                        ft.replace(R.id.mainFragment,theFind);
                        break;
                    case 2:
                        theWatch=new WatchFragment();
                        ft.replace(R.id.mainFragment,theWatch);
                        break;
                }
                ft.commit();

配合Fragment可以达到不同导航块指向不一样的fragment,具体逻辑代码可以自己写

{首先是在BottomNavigation调用相关函数之后就用了一个setDefaultFragment,在这个里面设置默认的Fragment和position=1 对应,之后能选择监听函数里面用ft.replace来替换相应的Fragmnet达到导航作用}

1.3.3

贴一个Fragment代码

public class FindFragment extends Fragment {
    EditText thetitle,thecontent;
    String title_up,content_up;
    Button bt_up;
    String theurl;
    String params,params02;
    public int key=0;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        View view=inflater.inflate(R.layout.find_fragment, container, false);
        TextView txt_main= (TextView) view.findViewById(R.id.tv_add);
        txt_main.setText("发布");
     	//链接php代码省略
        return view;
    }
}

2.Mysql数据库的创建

在这个地方使用了phpmyadmin直接可视化创建表了,具体的搭建,在linux上可以用一键脚本给服务器安装lnmp/lamp环境或者在本机上安装mysql服务

2.1创建一个用户:

mfx1126%是ALL PRIVILEGES是  --->创建一个用户名/密码,使其能够通过任意主机进行链接,这样的话,从任意主机发出的链接请求都能够顺利的链接数据库,其次就是权限问题,按照功能实现配置权限

2.2创建数据表:

这里设置的很简单一个id,title,content,记得配置一下utf8


主键设置id,且给其自增属性

title和content设置utf8_unicode_ci,确保中文无乱码

2.3其他

3.php文件的使用

不会php啦,然后查了很长时间,结合别人的代码,总之是搞出来一份貌似没有问题的代码啦。(暂停打卡)

(开工) 不太会php,基本讲解不了,直接贴代码啦

3.1 conn.php

主要进行数据库连接,通过该文件完成连接数据库

<?php  
    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);  
     $conn=mysql_connect("localhost","root","10002I321456DC89hjcom") or die("数据库服务器连接错误".mysql_error());  
     mysql_select_db("mfx1126",$conn) or die("数据库访问错误".mysql_error());  
       
     mysql_query("SET NAMES 'utf8'");
     mysql_query("SET CHARACTER SET utf8");
     mysql_query("SET CHARACTER_SET_RESULT=utf8");	 
?>  
具体可以参考php-mysql相关函数介绍,因为文件和数据库在同一服务器下,所以用localhost可以进行连接,这样的话,前面的用户可以设置为本地主机(localhost访问而非任意主机,可以增强一点安全性)

3.2 updata.php

<?php    
/* 
*用户登录,服务器进行的处理 
*/  
    include("conn.php");  
    mysql_select_db("mfx1126");    
    $gettitle=$_POST['title'];//客户端post过来的标题  
    $getcontent=$_POST['content'];//客户端post过来的内容
	/*INSERT INTO `data_clcy`(`title`, `content`) VALUES ([value-2],[value-3])*/
    $sql=mysql_query("INSERT INTO `data_clcy`(`title`, `content`) VALUES ('".$gettitle."','".$getcontent."')");   
    $result=mysql_fetch_assoc($sql);  
    mysql_close();    
?>   
具体可以参考php-mysql相关函数介绍一集sql语句,主要就是

3.3 getdata.php

<?php

require 'conn.php';        //引入conn.php文件

$result = mysql_query("select * from data_clcy order by id desc");    //数据表查询
$n=0;
while ($row = mysql_fetch_array($result)) {        //依次取出数据库中的信息
    $arr[$n++] = array( 'title' =>$row['title'],
                        'content' =>$row['content'],                      
     );
}

echo json_encode($arr);        //转变为JSON格式输出
?>
order by id desc 就是属性id 按照逆序排序,也就是时间越近在数组中越前

3.4 search.php

<?php

require 'conn.php';        //引入conn.php文件
$keyword=$_POST['keyword'];
$result = mysql_query("SELECT * FROM  `data_clcy` WHERE  `title` LIKE  '%".$keyword."%'");    //从test数据库的news数据表查询
$n=0;
while ($row = mysql_fetch_array($result)) {        //依次取出数据库中的信息
    $arr[$n++] = array( 'title' =>$row['title'],
                        'content' =>$row['content'],                      
     );
}

echo json_encode($arr);        //转变为JSON格式输出
?>

后面新加的一个查询数据库

4. Android-app端提交数据获取数据以及Json解析的逻辑代码

4.1 创建HttpUntils工具 - getJson工具函数代码:

public class HttpUntils {
    public static void getJson(final String url, final Handler handler){
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection coon;
                InputStream is;
                try {
                    coon= (HttpURLConnection) new URL(url).openConnection();//打开网络链接
                    coon.setRequestMethod("GET"); //设置发送请求方式是GRT
                    is=coon.getInputStream(); //返回对应输入流,获取响应内容
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String line="";
                    StringBuilder result=new StringBuilder(); //
                    while((line=br.readLine())!=null){
                        result.append(line);
                    }
                    Message message=new Message();
                    message.obj=result.toString();
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    public static void getJson(final String url, final Handler handler, final String keyword){
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection coon;
                InputStream is;
                try {
                    coon= (HttpURLConnection) new URL(url).openConnection();//打开网络链接

                        coon.setRequestMethod("POST");
                        coon.setRequestProperty("contentType","application/x-www-form-urlencoded");
                        coon.setRequestProperty("Content-Length", String.valueOf(keyword.getBytes().length));
                        //默认为false
                        coon.setDoOutput(true);
                        coon.getOutputStream().write(keyword.getBytes());
                    is=coon.getInputStream(); //返回对应输入流,获取响应内容
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String line="";
                    StringBuilder result=new StringBuilder(); //
                    while((line=br.readLine())!=null){
                        result.append(line);
                    }
                    Message message=new Message();
                    message.obj=result.toString();
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

}

4.2 提交数据 经由 php 到 mysql

 {
            bt_up= (Button) view.findViewById(R.id.bt_up);

            theurl="http://www.xtxxobexloxl.com/weixin/updata.php";
        }
        {   bt_up.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                thetitle= (EditText) getView().findViewById(R.id.et_title);
                thecontent= (EditText) getView().findViewById(R.id.et_content);
                title_up=thetitle.getText().toString();
                content_up=thecontent.getText().toString();
                if (content_up != null)
                {
                    content_up=content_up.replace("&","%26");
                }
                params="title="+title_up+"&"+"content="+content_up;
                //params02="content="+content_up;
                Log.e("&&&&&&&&&&&&&&&",params);
                Toast.makeText(getContext(), "正在提交......", Toast.LENGTH_SHORT).show();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //点击按钮进行提交
                        HttpURLConnection coon=null;
                        try {
                            URL url=new URL(theurl);
                            //ArrayList params = new ArrayList();
                            //params.add(new BasicNameValuePair("title",title_up));
                            //params.add(new BasicNameValuePair("content",content_up));
                            Log.e("00",params);
                            coon= (HttpURLConnection) url.openConnection();
                            coon.setRequestMethod("POST");
                            coon.setRequestProperty("contentType","application/x-www-form-urlencoded");
                            coon.setRequestProperty("Content-Length", String.valueOf(params.getBytes().length));
                            //默认为false
                            coon.setDoOutput(true);
                            coon.getOutputStream().write(params.getBytes());
                            if(coon.getResponseCode()==200){
                                //Toast.makeText(getContext(), "提交成功", Toast.LENGTH_SHORT).show();
                                key=1;
                                Log.e("oo","200");
                            }else{
                                //Toast.makeText(getContext(), "提交失败,确认网络或者反馈至邮箱:892581704@qq.com", Toast.LENGTH_LONG).show();
                                Log.e("oo","err");

                            }

                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }finally {
                            if(coon!=null){
                                coon.disconnect();
                                coon.disconnect();
                            }
                        }
                    }
                }).start();
                if(key==1){
                    Toast.makeText(getActivity(), "提交成功", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(getActivity(), "提交完毕,分享页面查看数据", Toast.LENGTH_SHORT).show();
                }


            }
        });
        }

//这段代码,有点遗憾就是提交之后应该根据成功与否的情况来给出不同的代码,这一块有一点想法是php提交mysql之后应该有类似返回码或者相关的函数,然后再回传给app,根据返回内容来提示成功与否

//这段代码,还有一个就是没有做非空判断,直接点击提交仍旧能提交成功,以及无意义词组判断也没有,非空直接!=null应该可以,无意义词组用正则去简单判断一下应该可以

//这里面,数据库链接交给了php,而数据库用户名密码在php文件写死,这块可以根据功能需求来做变化

4.3 得到数据 经由 php从mysql获取

public Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            result= (String) msg.obj;
            thedatas= JSON.parseArray(result,Thedata.class);
            adapter.notifyDataSetChanged();
        }
    };
 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        MainActivity mActivity= (MainActivity) getActivity();
        mActivity.setHandler(handler);
    }
HttpUntils.getJson(theUrl,handler);

5.其他

-lovelovelove-


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值