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

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,签名,反编译,生成。
保存好签名文件,唯一性。

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




原文地址:https://www.cnblogs.com/misybing/p/4804028.html