zoukankan      html  css  js  c++  java
  • 诗韵APP项目技术点

    和风天气SDK

    和风天气官方

    集成过程

    原理

    • 集成和风天气
    • 添加依赖
    • 添加权限
    • 在主线程进行动态权限申请
    • 定义getWeather()方法

    方法

        //获取天气
        public void getWeather() {
            HeWeather.getWeatherNow(getActivity(), Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultWeatherNowBeanListener() {
                public static final String TAG = "he_feng_now";
    
                @Override
                public void onError(Throwable e) {
                    if (MOON >= 3 && MOON <= 5) {
                        layout.setBackgroundResource(R.drawable.spring);
                        search_weather = "春";
                    } else if (MOON >= 6 && MOON <= 8) {
                        layout.setBackgroundResource(R.drawable.summer);
                        search_weather = "夏";
    
                    } else if (MOON >= 9 && MOON <= 11) {
                        layout.setBackgroundResource(R.drawable.autumn);
                        search_weather = "秋";
    
                    } else {
                        layout.setBackgroundResource(R.drawable.winter);
                        search_weather = "冬";
                    }
                    Log.e(TAG, "onError: ", e);
                    System.out.println("Weather Now Error:" + new Gson());
    
                }
    
                @Override
                public void onSuccess(Now dataObject) {
                    Log.e(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
                    String jsonData = new Gson().toJson(dataObject);
                    String tianqi = null, wendu = null, tianqicode = null;
                    if (dataObject.getStatus().equals("ok")) {
                        String JsonNow = new Gson().toJson(dataObject.getNow());
                        JSONObject jsonObject = null;
                        try {
                            jsonObject = new JSONObject(JsonNow);
                            tianqi = jsonObject.getString("cond_txt");
                            Log.e("tinaqi", tianqi);
                            wendu = jsonObject.getString("tmp");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    
                        tv_tianqi.setText(tianqi);
    
                        if (tianqi.equals("晴")) {
                            layout.setBackgroundResource(R.drawable.sunny);
                            search_weather = "晴";
                        } else if (tianqi.contains("云")) {
                            layout.setBackgroundResource(R.drawable.duoyun);
                            search_weather = "云";
                            Log.e("weather_str",search_weather);
                        } else if (tianqi.equals("阴")) {
                            layout.setBackgroundResource(R.drawable.cloudy);
                            search_weather = "陰";
                        } else if (tianqi.contains("雪")) {
                            layout.setBackgroundResource(R.drawable.snow);
                            search_weather = "雪";
                        } else if (tianqi.contains("雨")) {
                            layout.setBackgroundResource(R.drawable.rain);
                            search_weather = "雨";
                        } else {
                            if (MOON >= 3 && MOON <= 5) {
                                layout.setBackgroundResource(R.drawable.spring);
                                search_weather = "春";
                            } else if (MOON >= 6 && MOON <= 8) {
                                layout.setBackgroundResource(R.drawable.summer);
                                search_weather = "夏";
    
                            } else if (MOON >= 9 && MOON <= 11) {
                                layout.setBackgroundResource(R.drawable.autumn);
                                search_weather = "秋";
    
                            } else {
                                layout.setBackgroundResource(R.drawable.winter);
                                search_weather = "冬";
                            }
                        }
    
                    } else {
                        Toast.makeText(getActivity(), "有错误", Toast.LENGTH_SHORT).show();
                        return;
                    }
                }
            });
    
        }
    

    每日诗词推荐

    Okhttp

    Gson

    ListView

    原理

    • 通过Okhttp从后台获取gson数据
    • 执行主线程
    • 在主线程中初始化ListView
      listView.setAdapter(myAdapter);

    主线程执行

    getActivity().runOnUiThread(new Runnable() {
          @Override
          public void run() {
                action();
          }
    });
    

    诗词点击跳转

    Click

    Intent

    点击事件

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override      
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          Intent intent = new Intent(getActivity(), PoemDetail.class);
          intent.putExtra("poem", rec.get(position));
          startActivity(intent);
          }
    });
    

    动态权限申请

    Android权限

    权限申请

    //定义boolean类型的权限申请结果变量
    private boolean permission;
    private PackageManager pm;
    
    //在主线程中进行权限申请
    pm = getActivity().getPackageManager();
    permission = (
          PackageManager.PERMISSION_GRANTED ==pm.checkPermission("android.permission.ACCESS_FINE_LOCATION", 
          "com.example.a15632.poetrydemo"));
    
    //权限申请回调
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
          super.onRequestPermissionsResult(requestCode, permissions, grantResults);
          if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getActivity(), "Permission GET", Toast.LENGTH_SHORT).show();
                Log.e("permission1",permission+"");
                getWeather();
          } else {
    //Permission Denied
                Toast.makeText(getActivity(), "Permission Denied", Toast.LENGTH_SHORT).show();
                Log.e("permission1",permission+"");
          }
    }
    

    查找功能实现

    Okhttp

    Gson

    ListView

    UI键盘搜索

    android:imeOptions属性:

    • actionGo 开始
    • actionSend 发送
    • actionSearch 搜索
    • actionDone 完成
    <EditText
        android:id="@+id/et_home_input"
        android:hint="搜索诗句、诗名、关键词"
        android:imeOptions="actionSearch"
        android:inputType="text"
        android:background="@null"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="5"/>
    
            //关于EditView的操作,相应虚拟键盘上的"搜索"按钮
            input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    search(v);
                    return true;
                }
            });
    

    短信验证码服务SMSSDK

    MobTech

    集成过程

    原理

    • 集成SMSDK
    • 用户同意
    • 从短信自动获取
    • 注册一个事件回调监听,用于处理SMSSDK接口请求的结果
    • 自定义EventHandler,并通过Handler返回主线程
    • 使用SMSSDK获取验证码
    • 注销EventHandler

    集成、使用代码

    1. 集成
    // 在MobSDK的扩展中注册SMSSDK的相关信息
    MobSDK {
        appKey "2d0f808219f71"
        appSecret "3fbace76120dd6d8b1027a591ef49002"
        SMSSDK { "autoSMS true" }
    
    }
    

    保持登录状态

    SharedPreferences

    原理

    • 使用SharedPreferences记录用户的信息
    • SharedPreferences通过键值对的形式存储
    • 当用户访问自身信息,自动查找SharedPreferences生成的程序内部文件中的信息
  • 相关阅读:
    TranslateAnimation类:位置变化动画类
    android 启动第三方程序的代码(利用ComponentName)
    android背景选择器总结
    Spinner控件怎样在subActivity中使用
    Android 自定义 spinner (背景、字体颜色)
    AndroidWebView
    android gravity属性和weight属性
    android得到控件在屏幕中的位置
    解决android自定义标题充满的问题
    android中ListView的常用样式和属性
  • 原文地址:https://www.cnblogs.com/occlive/p/13626968.html
Copyright © 2011-2022 走看看