准备步骤:
使用步骤:
1.导入XUtils的jar包(直接搜索依赖)
- compile 'org.xutils:xutils:3.3.38'
- import org.xutils.x; //注意不要被自动导入其他包
2.在AndroidManifest配置权限
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.初始化(第三方SDK都需要初始化)
在MyApplication里操作(//在Activity获取Application的上下文用getApplication())- @Override
- public void onCreate() {
- super.onCreate();
- x.Ext.init(this);
- //x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
- ...
- }
访问网站:
- RequestParams params = new RequestParams("http://route.showapi.com/341-3");
- params.addBodyParameter("showapi_appid", "27210");
- params.addBodyParameter("showapi_sign", "9ee801974d5e4f119e69ceb780ac38af");
- x.http().get(params, new Callback.CommonCallback<String>() {
- public void onSuccess(String result) {...} //请求成功
- public void onError(Throwable ex, boolean isOnCallback) {...} //客户端出错,没有连接上网络,或者请求完毕报错
- public void onCancelled(CancelledException cex) {...} //用户取消
- public void onFinished() {...} //请求结束 必备。在此关闭dialog
- });
- params.setAsJsonContent(true);
- params.setBodyContent("json数据");
导入Gson的jar包
例子:
所需数据:
a. 调用接口 showapi《笑话大全》
c.
- {
- "showapi_res_body": {
- "allNum": 34961,
- "allPages": 1749,
- "contentlist": [
- {
- "ct": "2016-12-10 14:31:22.925",
- "id": "584ba13a6e368ed797a68445",
- "img": "http://www.zbjuran.com/uploads/allimg/161210/10-1612101402522T.jpg",
- "title": "听说最近两个单身汪弄了个新组合叫:彭胡弯。",
- "type": 2
- },
- .
- .
- .
- {
- "ct": "2016-12-10 10:31:14.192",
- "id": "584b68f26e368ed797a565e2",
- "img": "http://www.zbjuran.com/uploads/allimg/161210/10-161210101606243.jpg",
- "title": "程序员的愤怒",
- "type": 2
- }
- ],
- "currentPage": 1,
- "maxResult": 20,
- "ret_code": 0
- },
- "showapi_res_code": 0,
- "showapi_res_error": ""
- }
步骤:
1.导入jar包xutils、gson
2.在AndroidManifest配置权限
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.MyApplication.java类,在其中完成初始化
- //在Activity获取Application的上下文用getApplication()
- public class MyApplication extends Application{
- @Override
- public void onCreate() {
- super.onCreate();
- x.Ext.init(this);
- }
- }
4.JsonBean.java (Alt+S插入json数据见上c)
- public class JsonBean {
- private int showapi_res_code;
- private String showapi_res_error;
- private ShowapiResBodyBean showapi_res_body;
- public int getShowapi_res_code() {
- return showapi_res_code;
- }
- public void setShowapi_res_code(int showapi_res_code) {
- this.showapi_res_code = showapi_res_code;
- }
- public String getShowapi_res_error() {
- return showapi_res_error;
- }
- public void setShowapi_res_error(String showapi_res_error) {
- this.showapi_res_error = showapi_res_error;
- }
- public ShowapiResBodyBean getShowapi_res_body() {
- return showapi_res_body;
- }
- public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
- this.showapi_res_body = showapi_res_body;
- }
- public static class ShowapiResBodyBean {
- private int allPages;
- private int ret_code;
- private int currentPage;
- private int allNum;
- private int maxResult;
- private List<ContentlistBean> contentlist;
- public int getAllPages() {
- return allPages;
- }
- public void setAllPages(int allPages) {
- this.allPages = allPages;
- }
- public int getRet_code() {
- return ret_code;
- }
- public void setRet_code(int ret_code) {
- this.ret_code = ret_code;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public void setCurrentPage(int currentPage) {
- this.currentPage = currentPage;
- }
- public int getAllNum() {
- return allNum;
- }
- public void setAllNum(int allNum) {
- this.allNum = allNum;
- }
- public int getMaxResult() {
- return maxResult;
- }
- public void setMaxResult(int maxResult) {
- this.maxResult = maxResult;
- }
- public List<ContentlistBean> getContentlist() {
- return contentlist;
- }
- public void setContentlist(List<ContentlistBean> contentlist) {
- this.contentlist = contentlist;
- }
- public static class ContentlistBean {
- private String id;
- private String title;
- private String img;
- private int type;
- private String ct;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getImg() {
- return img;
- }
- public void setImg(String img) {
- this.img = img;
- }
- public int getType() {
- return type;
- }
- public void setType(int type) {
- this.type = type;
- }
- public String getCt() {
- return ct;
- }
- public void setCt(String ct) {
- this.ct = ct;
- }
- }
- }
- }
5. MainActivity.java
- /**
- * xUtils: http、view、db、image(三级缓存,没有压缩,有裁剪)
- * Gson、FastJson 解析Json
- * volley ——ImageLoad有三级缓存 ——NetWorkImageView
- * okHttp
- * rejava retrofit dagger2
- * Glide (压缩,裁剪,没有三级缓存)
- */
- // get/post由服务器决定,在接口文档上需要都有说明
- // get文件下载,post文件上传;get是拼接的,post是表单
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
- Button button;
- Button btnNext;
- ImageView iv;
- TextView tvNum;
- TextView tvTime;
- int i = 0;
- List<JsonBean.ShowapiResBodyBean.ContentlistBean> list;
- JsonBean.ShowapiResBodyBean.ContentlistBean contentlistBean;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- button = (Button) findViewById(R.id.btn);
- btnNext = (Button) findViewById(R.id.btnNext);
- iv = (ImageView) findViewById(R.id.iv);
- tvNum = (TextView) findViewById(R.id.tvNum);
- tvTime = (TextView) findViewById(R.id.tvTime);
- button.setOnClickListener(this);
- btnNext.setOnClickListener(this);
- btnNext.setVisibility(View.INVISIBLE);
- }
- @Override
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.btn:
- // 笑话大全 http://route.showapi.com/341-2?showapi_appid=27210&showapi_sign=9ee801974d5e4f119e69ceb780ac38af
- RequestParams params = new RequestParams("http://route.showapi.com/341-2");
- params.addBodyParameter("showapi_appid", "27210");
- params.addBodyParameter("showapi_sign", "9ee801974d5e4f119e69ceb780ac38af");
- x.http().get(params, new Callback.CommonCallback<String>() { //String JSONObject JSONArray File(下载文件) byte[]
- @Override
- public void onSuccess(String result) { //请求成功
- Log.e("======", result);
- Gson gson = new Gson(); //创建Gson对象
- JsonBean jsonBean = gson.fromJson(result, JsonBean.class); //得到JsonBean对象
- list = jsonBean.getShowapi_res_body().getContentlist();
- contentlistBean = list.get(0);
- String initImage = contentlistBean.getImg();
- x.image().bind(iv, initImage);<span style="white-space:pre"> </span>//此处XUtils的图片绑定操作
- tvNum.setText(1 + "");
- tvTime.setText(contentlistBean.getCt());
- btnNext.setVisibility(View.VISIBLE); //请求成功的话将BtnNext
- button.setVisibility(View.INVISIBLE);
- }
- @Override
- public void onError(Throwable ex, boolean isOnCallback) { //客户端出错,没有连接上网络,或者请求完毕报错
- Toast.makeText(MainActivity.this, "请求出错了", Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onCancelled(CancelledException cex) {<span style="font-family: Arial, Helvetica, sans-serif;"> //用户取消</span>
- }
- @Override
- public void onFinished() { //请求结束 必备。在此关闭dialog
- }
- });
- break;
- case R.id.btnNext:
- if (i < 19) {
- i++;
- } else {
- i = 0;
- }
- contentlistBean = list.get(i);
- String image = contentlistBean.getImg();
- x.image().bind(iv, image);
- tvNum.setText(i + 1 + "");
- tvTime.setText(contentlistBean.getCt());
- }
- }
- }
6.布局
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/btn"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="用xUtils访问网络" />
- <Button
- android:id="@+id/btnNext"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="下一张" />
- </FrameLayout>
- <TextView
- android:id="@+id/tvNum"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/tvTime"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <ImageView
- android:id="@+id/iv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
效果:
下载文件
- case R.id.btn_download:
- RequestParams params2 = new RequestParams("https://www.duetdisplay.com/DuetSetup.exe");
- params2.setCacheDirName("qqq");
- x.http().get(params2, new Callback.ProgressCallback<File>() { //下载用get,上传用post
- @Override
- public void onWaiting() {
- }
- @Override
- public void onStarted() {
- }
- @Override
- public void onLoading(long total, long current, boolean isDownloading) {
- Log.e("==============", current + "-------" + total);
- }
- @Override
- public void onSuccess(File result) {
- Log.e("==============", "下载成功");
- Log.e("文件储存路径:", result.getAbsolutePath());// /storage/emulated/0/Android/data/com.example.xutils/cache/qqq/1f7dd403daceb07d0f9c46f4258deda5
- }
- @Override
- public void onError(Throwable ex, boolean isOnCallback) {
- }
- @Override
- public void onCancelled(CancelledException cex) {
- }
- @Override
- public void onFinished() {
- Log.e("==============", "下载结束");
- }
- });
- break;
数据库操作
1. 在MyApplication里面配置数据库属性(这样使得全局只有并共用同一个数据库(可以有多个数据库,但是一般只有一个))
- public class MyApplication extends Application {
- private static MyApplication instance;
- public static MyApplication getInstance() {
- return instance;
- }
- @Override
- public void onCreate() {
- super.onCreate();
- x.Ext.init(this);
- instance = this;
- }
- //可以有多个数据库,但是最好只有一个,配置在MyApplication使得变为全局,只有这一个数据库
- DbManager getDbManager() { //通过DbManager来设置数据库
- DbManager.DaoConfig daoConfig = new DbManager.DaoConfig();
- daoConfig.setDbName("user.db");
- //daoConfig.setDbDir(""); //设置数据库的存储路径,默认在data/data/包/databases/数据库名称
- //daoConfig.setDbVersion(1); //数据库版本,默认是1
- return x.getDb(daoConfig);
- }
- }
2. 数据Bean
- //需要注解,才能操作数据库
- //如果使用数据库,必须要有空参的构造方法 get和set
- @Table(name = "User")
- public class UserBean {
- @Column(name = "name")
- private String name;
- @Column(name = "ids", isId = true, autoGen = true) //id为主键,根据id判断是否为同一个对象
- private int ids;
- @Column(name = "age")
- private int age;
- @Column(name = "sex")
- private String sex;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getIds() {
- return ids;
- }
- public void setIds(int ids) {
- this.ids = ids;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- }
3. 增删改查
1.创建DbManager对象,通过该对象执行增删改查
2.获取数据Bean对象
3.添加数据需要给该对象设置值
添加:
删除:
- dbManager.save(userBean);
- //dbManager1.delete(UserBean.class); //删除全部数据库
- //dbManager1.deleteById(UserBean.class, 6); //删除指定id的项 //此时后一个不会自动把ids变为6,即ids为6的项消失 //删除了6再添加6也是按顺序添加,6在自动增长的情况下永远空缺
- dbManager1.delete(UserBean.class, WhereBuilder.b("sex", "=", "女").and("age", "<", "19"));
- dbManager2.update(UserBean.class, WhereBuilder.b("age", "<", "19"), keyValue, keyValue2);
- List<UserBean> list = dbManager3.findAll(UserBean.class); //查询所有 (常用)
- //dbManager3.findById(UserBean.class, 1); //查询id为1的数据
- //List<UserBean> list = dbManager3.selector(UserBean.class).where("sex", "=", "女").and("age", "<", "19").findAll(); //按要求查询
- dbManager.close();
- public class MainActivity extends AppCompatActivity {
- @BindView(R.id.btn_save)
- Button btnAdd;
- @BindView(R.id.btn_delete)
- Button btnDelete;
- @BindView(R.id.btn_query)
- Button btnQuery;
- @BindView(R.id.btn_update)
- Button btnUpdate;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ButterKnife.bind(this);
- }
- @OnClick({R.id.btn_save, R.id.btn_delete, R.id.btn_query, R.id.btn_update})
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.btn_save:
- DbManager dbManager = MyApplication.getInstance().getDbManager();
- UserBean userBean = new UserBean();
- userBean.setAge(10);
- userBean.setIds(6); //如果自动增长,那么会持续创建数据项,否则只会有一条ids为1的项
- userBean.setName("张三");
- userBean.setSex("女");
- //--存储项到数据库,不会自动更新 (常用)
- try {
- dbManager.save(userBean); //如果不设置自动增长,那么储存失败,因为该ids的项已经存在
- } catch (DbException e) {
- e.printStackTrace();
- Log.e("错误1", "储存失败");
- }
- ///--存储数据到数据库,如果已经存在则更新数据
- /* ----主键不自动增长的情况下
- try {
- dbManager.save(userBean);
- } catch (DbException e) { //如果已经存在
- e.printStackTrace();
- try { //如果已经存在则存储或修改(主键必须不设置为自动增长)
- dbManager.saveOrUpdate(userBean);
- } catch (DbException e1) {
- e1.printStackTrace();
- }
- }
- */
- /* ----主键自动增长的情况下
- try {
- UserBean userBean1 = dbManager.findById(UserBean.class, userBean.getIds()); //在数据库中根据ids找到对象
- if (userBean1 == null) { //如果数据库中没有该对象,则保存该对象,ids自动增长,不受修改的ids的值的影响
- dbManager.save(userBean);
- } else { //如果数据库中有该对象,则更新该对象
- dbManager.saveOrUpdate(userBean); //暂时发现与.update()效果一样
- }
- } catch (DbException e) {
- e.printStackTrace();
- }
- try {
- dbManager.close(); //数据库需要关闭
- } catch (IOException e) {
- e.printStackTrace();
- }
- */
- break;
- case R.id.btn_delete: //一般不操作删除
- DbManager dbManager1 = MyApplication.getInstance().getDbManager();
- try {
- //dbManager1.delete(UserBean.class); //删除全部数据库
- //dbManager1.deleteById(UserBean.class, 6); //删除指定id的项 //此时后一个不会自动把ids变为6,即ids为6的项消失 //删除了6再添加6也是按顺序添加,6在自动增长的情况下永远空缺
- dbManager1.delete(UserBean.class, WhereBuilder.b("sex", "=", "女").and("age", "<", "19"));
- } catch (DbException e) {
- e.printStackTrace();
- }
- try {
- dbManager1.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- case R.id.btn_update:
- DbManager dbManager2 = MyApplication.getInstance().getDbManager();
- KeyValue keyValue = new KeyValue("age", 80);
- KeyValue keyValue2 = new KeyValue("name", "赵六");
- try {
- dbManager2.update(UserBean.class, WhereBuilder.b("age", "<", "19"), keyValue, keyValue2);
- } catch (DbException e) {
- e.printStackTrace();
- }
- try {
- dbManager2.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- case R.id.btn_query:
- DbManager dbManager3 = MyApplication.getInstance().getDbManager();
- try {
- List<UserBean> list = dbManager3.findAll(UserBean.class); //查询所有 (常用)
- // dbManager3.findById(UserBean.class, 1); //查询id为1的数据
- // List<UserBean> list = dbManager3.selector(UserBean.class).where("sex", "=", "女").and("age", "<", "19").findAll(); //按要求查询
- } catch (DbException e) {
- e.printStackTrace();
- }
- try {
- dbManager3.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- break;
- }
- }
- }
- <pre code_snippet_id="2114228" snippet_file_name="blog_20170110_22_2558018"></pre>
- <pre></pre>
- <pre></pre>