诗韵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生成的程序内部文件中的信息
posted @ 2020-09-07 15:22  不爱学习的小策  阅读(259)  评论(2编辑  收藏  举报