php+android 搭建后台及显示

ps:最近需要做几个android展示界面,原来用过xampp做简单的回显页面,于是这次后台想用php搭建,于是开始挖坑学习

环境xampp(集成版tomcat+mysql)+phpstrom(开发环境)

首先看了看php的基础语法和常用函数(这个总结不错)

然后创建了一个简单的php页面来连接数据库,极客学院视频,对数据库进行简单增删改查,然后通过页面回显出数据。

我的目标是做出分页请求和上传图片功能,现在还在探索之中。


4.26-已经用php完成了初步的页面回显
我建立了三个表course、suptitle、subtitle(分别是:课程名,一级标题,二级标题),通过phpadmin后台快速建表

course suptitle subtitle
course_no(int) suptitle_id(int) subtitle_id(int)
course_name(text,utf-8) suptitle(text,utf-8) subtitle_text(text,utf-8)
course_description(text,utf-8) course_no(int) mid (int)
type(int) suptitle_id (int)
  1. 默认编码要设成utf-8,否则插入中文会成问号
  2. mid是慕课网视频的id,我的数据是从慕课网抓取的

然后插入了测试数据,写了三个php文件。

连接文件


    //数据库的用户名为root,密码为空
    $con = mysql_connect("localhost", "root", "");
    //设置字符集为utf8
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET CHARACTER_SET_RESULT=utf8");

    if (!$con){
        die(mysql_error());
    }
    //访问数据库interaction_study
    mysql_select_db("interaction_study", $con);
?>

获取课程页面


/*
 * 获得JSON数据
 * 获得type=0的消息:
 * http://localhost/interaction_study/getCourseJson.php?type=0
 */
 require 'mysql_connect.php';

 $n = 0;
 $result = mysql_query("select * from course where type='$_GET[type]'");

 while ($row = mysql_fetch_array($result)){
    $arr[$n++] = array("course_no" => $row['course_no'],
                        "course_name" => $row['course_name'],
                        "course_description" => $row['course_description'],
                        "type" => $row['type']
                    );
 }

 echo json_encode($arr);
?>

剩下两个基本和这个类似,就不贴了,然后请求一下,返回了一个json格式的数组

http://localhost/interaction_study/getCourseJson.php?type=0

[{"course_no":"825","course_name":"JS\u63d2\u4ef6\u5f00\u53d1\u4e4b-Tab\u9009\u9879\u5361","course_description":"Tab\u9009\u9879\u5361\uff0c\u4f5c\u4e3a\u7f51\u9875\u5fc5\u4e0d\u53ef\u5c11\u7684\u5c55\u793a\u529f\u80fd\uff0c\u5b83\u7684\u5b58\u5728\u4e0d\u4ec5\u53ef\u4ee5\u5728\u9875\u9762\u4e2d\u5408\u7406\u7684\u5c55\u793a\u5185\u5bb9\uff0c\u4e5f\u7b26\u5408\u5f53\u4e0b\u5b9e\u73b0\u65e0\u5237\u65b0\u5f02\u6b65\u5c55\u793a\u6570\u636e\u7684\u6f6e\u6d41\uff0c\u5b83\u548c\u7126\u70b9\u56fe\u8f6e\u56de\u76f8\u6bd4\u5f02\u66f2\u540c\u5de5\uff0c\u4f46\u672c\u8d28\u4e0d\u540c\uff0c\u5e0c\u671b\u901a\u8fc7\u8fd9\u8282\u65e2\u7b80\u5355\u6709\u666e\u904d\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u4e00\u4e00\u5256\u6790\u5b83\u7684\u5b9e\u73b0\u539f\u7406\u3002","type":"0"}]

android使用retrofit+rxjava进行请求。(以前没用过这个组合,这个页面做完学习一下原理,又挖了一个坑)

测试的数据比较少,已经用java从慕课网爬了一些数据(不是正则,用的WebCollector库,吐槽下:正则写起来太麻烦了..),到时候写个脚本导入一下。


5.7 看了个简单的php项目,实现分页,
现在继续做,之前大标题和小标题是分开查询的,现在通过一个页面查询出来(又在语法上被坑,已被单引号双引号搞晕,看了几个博客都没看懂,select * from subtitle where suptitle_id=’$sup_row[‘suptitle_id’]’这句会出错,单引号不加也出错,换成双引号也出错,最后换成变量就能使了???


/* interaction_study
 * http://localhost/interaction_study/getTitlesJson.php?course_no=825
 */
 require 'mysql_connect.php';

 $n = 0;
 $m = 0;
 $suptitles = mysql_query("select * from suptitle where course_no='$_GET[course_no]'");

while ($sup_row = mysql_fetch_array($suptitles)){
    $sup_id=$sup_row['suptitle_id'];
    $subtitles = mysql_query("select * from subtitle where suptitle_id=$sup_id");

    while ($sub_row = mysql_fetch_array($subtitles)){
        $subtitle_result[$m++] = array("subtitle_id" => $sub_row['subtitle_id'],
                        "subtitle_text" => $sub_row['subtitle_text'],
                        "mid" => $sub_row['mid'],
                        "suptitle_id" => $sub_row['suptitle_id']
                    );
    }
    $titles_result[$n++] = array("suptitle_id" => $sup_row['suptitle_id'],
                        "course_no" => $sup_row['course_no'],
                        "suptitle" => $sup_row['suptitle'],
                        "subtitie_text" => $subtitle_result
                    );
 }

 echo json_encode($titles_result);
?>

5.9昨天已经把界面以及网络请求写好了,用的是okhttp+retrofit+rxjava
添加依赖

    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
  • 请求课程
//实体类
public class Course {

    /**
     * course_no : 825
     * course_name : JS插件开发之-Tab选项卡
     * course_description : Tab选项卡,作为网页必不可少的展示功能,它的存在不仅可以在页面中合理的展示内容,也符合当下实现无刷新异步展示数据的潮流,它和焦点图轮回相比异曲同工,但本质不同,希望通过这节既简单有普遍的例子,我们一一剖析它的实现原理。
     * type : 0
     */

    private int course_no;
    private String course_name;
    private String course_description;
    private int type;
    private List suptitle;

    public Course(String course_name, String course_description, int type) {
        this.course_name = course_name;
        this.course_description = course_description;
        this.type = type;
    }

    public List getSuptitle() {
        return suptitle;
    }

    public void setSuptitle(List suptitle) {
        this.suptitle = suptitle;
    }

    public int getCourse_no() {
        return course_no;
    }

    public void setCourse_no(int course_no) {
        this.course_no = course_no;
    }

    public String getCourse_name() {
        return course_name;
    }

    public void setCourse_name(String course_name) {
        this.course_name = course_name;
    }

    public String getCourse_description() {
        return course_description;
    }

    public void setCourse_description(String course_description) {
        this.course_description = course_description;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

}
//请求接口
public interface CourseService {
    @GET("getCourseJson.php")
    Call> getCourses(@Query("type") int type);
}

//请求代码
Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(APPURL.BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

                CourseService service = retrofit.create(CourseService.class);
                Call> call = service.getCourses(position);

                call.enqueue(new Callback>() {
                    @Override
                    public void onResponse(Call> call, Response> response) {
                        courses.addAll(response.body());
                        adapter.setList(courses);
                    }

                    @Override
                    public void onFailure(Call> call, Throwable t) {
                        t.printStackTrace();
                    }
                });

另一个Titles请求写法与Course差不多,不贴代码了。

你可能感兴趣的:(android总结)