@myron-lee
2015-01-15T14:51:00.000000Z
字数 2913
阅读 1386
每日记录
网络请求使用 Volley。暂时不进行缓存。利用数据库缓存不够方便。
使用 Volley 的模板代码
final ProgressAndResultDialog progressAndResultDialog = new ProgressAndResultDialog(this);progressAndResultDialog.showProgress("正在刷新公告...");StringRequest refreshNoticeRequest = new StringRequest(Request.Method.POST, URL.REFRESH_MESSAGE, new Response.Listener<String>() {@Overridepublic 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() {@Overridepublic void onErrorResponse(VolleyError error) {Log.e("", error.getMessage());progressAndResultDialog.showResult(false, "抱歉,出错了~");}}){@Overridepublic 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;}@Overrideprotected Map<String, String> getParams() throws AuthFailureError {String latestMessagePubTime = dbHelper.getLatestMessagePubTime();Map<String, String> params = new HashMap<String, String>();params.put("latestMsgPubTime", latestMessagePubTime);return params;}@Overrideprotected 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