• [原创] 若水新闻安卓客户端开发教程笔记


    Lesson3 - 设计新闻分类导航UI


    arrays.xml
    定义一个数组
    String[] categoryArray = getResources().get
    GridView category = new GridView(this);
    category.setNumColumns(GridView.AUTO_FIT);
    category.setGravity(Gravity.CENTER);

    px转化为dip格式
    使用DensityUtil.java工具类

    Adapter
    SimpleAdapter
    for(int i=0;i<categoryArray.length;i++)
    {
    HashMap
    }

    HorizontalScrollView


    Lesson4 - 点击改变背景及文字颜色


    小类可以重写,定制化,大类内部函数多,接口复杂,不建议写
    bindView getView textView
    position setbackground GridView 自定义SimpleAdampter


    Lesson5 - 新闻列表布局信息


    服务器信息调用,使用HashMap


    Lesson6 - 评论框的编写


    图片,点击后转为EditView

    draw9patch 9.png


    Lesson7 - 升级新闻内容UI


    ViewFlipper


    Lesson8 - 设计新闻回复UI


    主要为界面布局设计
    扩展<include>标签的使用


    Lesson9 - 调用服务器接口,解析新闻信息


    请求url
    启动Tomcat
    category
    循环数组
    if (temp == 2)

    title
    Category{
    }
    url = ?
    name value键值对

    private final int NEWSCOUNT = 5;


    public
    有异常则使用try { } catch { }
    if(retCode == 0)

    json
    JSONObject dataObj =
    int totalnum = dataObject()
    Android中动态更新ListView


    Lesson10 - 新闻分类显示及底部加载更多


    Toast
    声明为全局变量
    List <HashMap<String, String>>;
    ArrayList

    空指针异常的出现及解决(22‘00“)
    category.
    private
    mCid = category.get(Position).get("category_title").getCid();
    System.out.printIn("Ori:"+Cid)
    private void getSpeCateNews(mCid, mNewsData);
    mewsList.clear();
    SimpleListAdapter;
    mNewsList
    mNewsData;
    要么New出来,要么查找出来
    mCid作为分类标识
    notifyData

    __底部加载Button

    addFooterView(loadView)
    View footerView = mInflater.inflate(R.layout.)
    loadmore.xml
    private OnClickListener loadMoreListener = new OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
    //获取该栏目下新闻
    getSpeCateNews(mCid,mNewsData,mNewsData.size(),false);
    //通知ListView更新
    mNewsListAdapter.notifyDataSetChanged();}};
    getSpaCateNews(mCid, boolen firsttime)
    if(firsttime)
    {}
    函数是个好东西


    Lesson11 - 使用AsyncTask异步更新UI界面及原理分析


    即在操作时使UI变化
    private class LoadNewsAsyncTask<Object, Integer, Void>
    {
    @Override
    protected void onPreExecute(Bitmap result)
    {
    mTitlebarRefresh.setVisibility(View.GONE);
    mLoadNewsProgress.setVisibility(View.VISIBLE);
    mLoadMoreBtn.setText(R.string.loadmore_txt);
    }
    @Override
    protect Void doInBackground(Object... params)
    }
    onPreExecute()

    1编程时如何在输入小写完成后一键变成大写
    2如何注释某行到行首

    Toast 信息放入一类,调用其参数,使代码更友好


    Lesson12 - 点击标题进入详细内容页面


    新闻分类要传递,信息标题,时间,来源要传递,新闻内容通过接口获取
    跟帖信息补充到HashMap里

    全局变量mCategory,局部变量category

    intent.putExtra("newsData", mNewsData);
    startActovity(intent);

    Java基础需要深化

    intent.putExtra("position", posotion)
    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    //Position
    mPosition = bundle.getInt("position");
    serializable =
    intent.getbundlerExtra("");
    //获取传递的信息
    TextView newsdetails_titlebar_title=

    两个Activity的切换

    跟帖即输入内容,保存且显示。


    Lesson13 - 异步加载新闻内容


    - 修正上下篇新闻
    同步加载新闻内容,异步加载新闻内容
    TextView中显示,UI所在主线程

    Activity.runOnUoThread(Runnable)
    View.post(Runnable)
    View.postDelayed(Runnable, long)
    Handler
    复写AsyncTask

    private handlermHandler = new Handler()
    {
    getNewsBody
    newsDetails = (TextView)
    nNewsDetails.setText(Html.fromHtml(msg.obg.toString()));


    什么是同一个或不同一个线程?
    异步加载新闻信息
    服务器启动
    mPostion++;
    HashMap
    动态的新闻信息
    View放在Fliper里面
    新闻回复数
    在Titlebar里头
    声明为全局的Button
    一条一条分析
    Position<mNewsData-1>


    String newsStr = getNewsBody();
    private final int FINISH = 0;

    HandlerMessage{
    mNewsDetails.setText(Html)}
    }

    Android异步加载图片


    Lesson14 - 新闻回复功能


    mNewsReply
    onTouchListener
    setVisibility(View.VISIABLE)
    线程
    ret
    message
    post
    params.add(new Parameter("nid",mNId+""))

    SyncHttp http = new SycHttp();
    http.HttpPost(url,params)
    Android根据手机号获取位置信息,根据GPS获取位置信息。
    try
    {
    String retStr = http.httpPost(url,params);
    JSONObject object = new JSONObject(retStr);
    int retCode
    drunable
    }

    点击时聚焦EditText并且显现软键盘输入法
    Object.requestFocus();
    m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
    隐藏输入法:
    m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);


    Lesson15 - 展示新闻回复信息 


    private List<HashMap<String, Object>> mCommsData;
    private void getComments(int nid)
    {
    //请求URL和字符串
    String url = "http://10.0.2.2:8080/web/getComments";
    String params = "nid="+nid+"&startnid=0&count=10";
    SyncHttp syncHttp = new SyncHttp();
    try
    {
    //以
    int retCode = jsonObject.getInt("ret");
    if(0==retCode)
    {
    JSONObject dataObject = jsonObject.getJSONObject("data");
    //获取返回数目
    int totalnum = dataObject.getInt("totalnum");
    if (totalnum>0)
    {
    //获取返回新闻集合
    JSONArray commslist = dataObject.getJSONArray("commentslist");
    for(int i=0;i<commslist.length();i++)
    {
    JSONObject commsObject = (JSONObject)commslist.opt(i);
    HashMap<String, Object> hashMap = new HashMap<String, Object>();
    hashMap.put("cid", commsObject.getInt("cid"));
    hashMap.put("regipn", commsObject.getString("region"));
    hashMap.put("ptime",commsObject.getString("ptime"));
    hashMap.put("content", commsObject.getString("content"));
    mCOmmsData.add(hashMap);
    }
    }
    else
    {
    Toast.makeText(CommentsActivity.this, "暂无回复", Toast.LENGTH_LONG)
    }
    else
    { Toast.}
    }
    }


    Lesson16 - 添加广告


    选择广告提供商,广告联盟,可提取现金,如百度移动联盟。
    推广安卓SDK
    声明方式,代码方式实现广告,实例化,注释说明。

    引用jar包
    新建文件夹,复制jar包,右击->Build Path ->Add to Build Path

    配置Manifest添加权限
    添加APPSID,标识当前应用程序ID信息

    添加应用详情Activity
    创建attrs.xml文件

    sdk包的路径申明

    No Add to Show 有延迟


    Lesson17 - 软件自动更新


    获取服务器端版本号- 判断是否更新- 下载更新- 确认安装- 完成安装

    执行更新的操作。
    UpdateManager

    XML解析 ParseXmlService.java

    Builder构造Dialog
    获取SD卡路径,下载apk放在Download目录下
    file.mkdir();
    cancelUpdate
    更新进度条信息,更新UI信息需要放在UI线程里,放在Handler
    通过判断进度,使Handler更新UI
    installApk方法安装程序
    直接拷贝使用

    DDMS界面找到mnt-sdcard-download-baidunews1.0.13.apk
    java+xml实现


    Lesson18 - 自定义TextView(1)图文混排


    CustomTextView.java
    TextView textView = new TextView(this);
    TextView
    ArrayList<HashMap<String, String>> datas = ArrayList
    复写父方法
    public CustomTextView(Context context)
    {
    this(context, null);
    }

    if(type.epuals("image"))
    {
    ImageView imageView = new ImageView(mconText);
    imageView.setLayoutParams(new LayoutPrams(LayoutParams.WRAP_CONTENT);)
    imageView.setImageResource(R.drawable.kuka);
    addView(imageView);
    new DownloadPicThread(imageView, hashMap.get("value"));

    }

    setOrientation(LinearLayout.VERTICAL);


    <com.szy.view.CustomTextView>

    CustomTextView custom = new TextView

    Html.fromHtml(Source, imageGetter, tagHandler)(须尝试,未测试)

    attrs.xml
    Android自定义属性
    TypedArray 可引用并实例化自定义xml属性
    <declare-styleable name="customTextView">

    <attr name="image_width" format="dimension" />
    get 方法,获取图片宽度和高度,20'20"

    szy:image_width="200dip"
    XML的命名空间,系统自带及自己命名的空间
    包的名字
    图片宽度和高度有了改变
    属性信息
    LayoutParams(new Layout)
    params.gravity = Gravity.CENTER_HORIZION
    动态配置,异步加载图片信息
    View.post


    Lesson19 - 自定义TextView(2)将自定义组件应用到新闻客户端。


    自定义控件有缺陷
    没法区分图片还是文本
    新闻内容必须按固定格式返回
    接口信息
    body
    GetServerlate文件夹覆盖其一class文件
    ArrayList里面有三个HashMap
    文本信息的分割
    图片的格式都已经固定了
    文本信息是从数据库里读出来的
    for (int )
    return BodyList;

    mNewsDetails


    Lesson20 - 程序打包发布


    版本测试每个版本都进行编译测试,机型测试,系统room定制后作修改i,可能使应用无法使用,需要进行多机型测试。

    安装手机驱动程序,USB调试启用,可以将真机设备加入Eclipse模拟器设备。

    可进行真机测试,提高效率。

    打包apk,签名,反编译,生成。
    保存好签名文件,唯一性。

    友盟 统计应用的下载使用等情况和数据




  • 相关阅读:
    ZJOI2017 Day3 滚粗记
    ZJOI2017 Day2
    bzoj4245 [ONTAK2015]OR-XOR (贪心)
    bzoj4631 踩气球 (树状数组+线段树)
    bzoj5219 [Lydsy2017省队十连测]最长路径 (DP)
    bzoj5216 [Lydsy2017省队十连测]公路建设 (线段树)
    bzoj2754 [SCOI2012]喵星球上的点名 (后缀数组+树状数组)
    bzoj2342 [Shoi2011]双倍回文 (manacher)
    bzoj4657 tower (最小割)
    bzoj2064 分裂 (状压dp)
  • 原文地址:https://www.cnblogs.com/misybing/p/4804028.html
Copyright © 2020-2023  润新知