@myron-lee
2015-01-15T14:51:00.000000Z
字数 2913
阅读 1291
每日记录
网络请求使用 Volley。暂时不进行缓存。利用数据库缓存不够方便。
使用 Volley 的模板代码
final ProgressAndResultDialog progressAndResultDialog = new ProgressAndResultDialog(this);
progressAndResultDialog.showProgress("正在刷新公告...");
StringRequest refreshNoticeRequest = new StringRequest(Request.Method.POST, URL.REFRESH_MESSAGE, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
switch (Integer.valueOf(response)) {
case 0:
progressAndResultDialog.showResult(false, "抱歉,出错了~");
break;
case 1:
progressAndResultDialog.showResult(true, "刷新成功!");
case 2:
progressAndResultDialog.showResult(true, "刷新成功!");
refreshNoticeListView();
default:
break;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("", error.getMessage());
progressAndResultDialog.showResult(false, "抱歉,出错了~");
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
// headers.put("User-agent", "Mozilla/5.0");
return headers;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
String latestMessagePubTime = dbHelper.getLatestMessagePubTime();
Map<String, String> params = new HashMap<String, String>();
params.put("latestMsgPubTime", latestMessagePubTime);
return params;
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
int parseResult = parseRefreshNoticeResponse(new String(response.data));
return Response.success(String.valueOf(parseResult), getCacheEntry());
}
};
refreshNoticeRequest.setTag(TAG);
RequestQueueSingleton.getInstance(context).addToRequestQueue(refreshNoticeRequest);
这个Activity必须用到本机号码,所以我假设用户已经使用手机号登录,且把手机号存在Prefrence 中了, key值为thisPhoneNum。
拷贝 RequestQueueSingleton 到 net 文件夹下。
为什么不用 singleton 就没把请求发出去呢,发出去了,谁叫你输出日志不加 tag 的,没看到吧。
private void startCallActivity(String phoneNumber)
{
try
{
StringBuilder builder = new StringBuilder();
builder.append("tel:");
builder.append(phoneNumber);
Intent intent = new Intent(android.content.Intent.ACTION_DIAL, Uri.parse(builder.toString()));
startActivity(intent);
}
catch(android.content.ActivityNotFoundException e)
{
// can't start activity
}
}
因为牵扯到图片,不能再用 SimpleAdapter。需要自定义 Adapter。用了 ViewHolderAdapter,只用自己写findView和 setData两部分。确实方便,应该继续使用。它利用了反射和泛型把 ViewHolder和 Adapter 分离开了。只用写 ViewHolder就行啦。可以写博客
public View getView(int position, View convert, ViewGroup parent) {
ViewHolder<T> holder = null;
if (convert == null) {
convert = mInflater.inflate(mResource, parent, false);
try {
holder = mClass.getDeclaredConstructor(View.class).newInstance(convert);
} catch (Exception e) {
e.printStackTrace();
}
convert.setTag(holder);
} else {
holder = (ViewHolder<T>) convert.getTag();
}
holder.setItem(mDatas.get(position));
return convert;
}
使用的时候注意一下,自定义的ViewHolder类一定要对 ViewHolderAdapter 类可见。因为后者要通过反射,创建前者的对象。最好放在一个包里面。
首先好好阅读自己写的代码,跟自己学习。
private Context context = getApplicationContext();
错误,类加载的时候,还不能 getApplicationContext