极客匿名项目APP学习
极客网,极客匿名项目APP学习学习总结:
该项目非常简单学到内容及运用到技术:
1.全部根据文档要求,规范化开发项目,一步一步的实现功能效果。
2.MD5工具使用
3.URLConnection进行网络连接,并进行封装。
4.AsyncTask异步任务的使用
5.获取联系人,并进行JSON转化。
6.缓存的使用
7.adapter的使用
项目Client和Server及文档下载地址:http://download.csdn.net/detail/itjavawfc/8553795
一)缓存使用:
public static final String KEY_TOKEN="token"; //缓存token public static String getCachedToken(Context context){ return context.getSharedPreferences(APP_ID, Context.MODE_PRIVATE).getString(KEY_TOKEN, null); } public static void cacheToken(Context context,String token){ Editor e=context.getSharedPreferences(APP_ID, Context.MODE_PRIVATE).edit(); e.putString(KEY_TOKEN, token); e.commit(); } //缓存电话号码 public static String getCachedPhoneNum(Context context){ return context.getSharedPreferences(APP_ID, Context.MODE_PRIVATE).getString(KEY_PHONE_NUM, null); } public static void cachePhoneNum(Context context,String phoneNum){ Editor e=context.getSharedPreferences(APP_ID, Context.MODE_PRIVATE).edit(); e.putString(KEY_TOKEN, phoneNum); e.commit(); }
二)AsyncTask异步任务的使用和NetConnection封装的URLConnection
public class NetConnection { public NetConnection(final String url,final HttpMethod method,final SuccessCallback successCallback,final FailCallback failCallback,final String ... kvs){ new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { StringBuffer paramsStr=new StringBuffer(); for(int i=0;i<kvs.length;i+=2){ paramsStr.append(kvs[i]).append("=").append(kvs[i+1]).append("&"); } paramsStr.substring(0, paramsStr.length()-2); try { URLConnection uc; //两种不同的方式来上传数据 switch(method){ case POST: uc=new URL(url).openConnection(); uc.setDoOutput(true); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(uc.getOutputStream(),Config.CHARSET)); bw.write(paramsStr.toString()); bw.flush(); break; default: uc=new URL(url+"?"+paramsStr.toString()).openConnection(); break; } System.out.println("Request url:"+uc.getURL()); System.out.println("Request data:"+paramsStr); //读取数据 BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream(), Config.CHARSET)); String line=null; StringBuffer result=new StringBuffer(); while((line=br.readLine())!=null){ result.append(line); } System.out.println("Result:"+result.toString()); return result.toString(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if(result!=null){ if(successCallback!=null){ successCallback.onSuccess(result); } }else{ if(failCallback!=null){ failCallback.onFail(); } } } }.execute(); } public static interface SuccessCallback{ void onSuccess(String result); } public static interface FailCallback{ void onFail(); } }
利用封装类,借助它来从网络上获取数据:
public class UploadContacts { public UploadContacts(String phone_md5,String token,String contacts,final SuccessCallback successCallback,final FailCallback failCallback){ new NetConnection(Config.SERVER_URL, HttpMethod.POST, new NetConnection.SuccessCallback() { @Override public void onSuccess(String result) { try { JSONObject obj=new JSONObject(result); switch(obj.getInt(Config.KEY_STATUS)){ case Config.RESULT_STATUS_SUCCESS: if(successCallback!=null){ successCallback.onSuccess(); } break; case Config.RESULT_STATUS_INVALID_TOKEN: if(failCallback!=null){ failCallback.onFail(Config.RESULT_STATUS_INVALID_TOKEN); } break; default: if(failCallback!=null){ failCallback.onFail(Config.RESULT_STATUS_FAIL); } break; } } catch (JSONException e) { e.printStackTrace(); if(failCallback!=null){ failCallback.onFail(Config.RESULT_STATUS_FAIL); } } } }, new NetConnection.FailCallback() { @Override public void onFail() { if(failCallback!=null){ failCallback.onFail(Config.RESULT_STATUS_FAIL); } } }, Config.KEY_ACTION,Config.ACTION_UPLOAD_CONTACTS,Config.KEY_PHONE_MD5,phone_md5,Config.KEY_TOKEN,token,Config.KEY_CONTACTS,contacts); } public static interface SuccessCallback{ void onSuccess(); } public static interface FailCallback{ void onFail(int errorCode); } }
三)读取联系人【一般项目都有的一个小功能】:
public class MyContacts { public static String getContactsJSONString(Context context){ Cursor c=context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); String phoneNum; JSONArray jsonArr=new JSONArray(); JSONObject jsonObj; while(c.moveToNext()){ phoneNum=c.getString(c.getColumnIndex(Phone.NUMBER)); if(phoneNum.charAt(0)=='+'&&phoneNum.charAt(1)=='8'&& phoneNum.charAt(2)=='6'){ } jsonObj=new JSONObject(); try { jsonObj.put(Config.KEY_PHONE_MD5, MD5Tool.md5(phoneNum)); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } jsonArr.put(jsonObj); } System.out.println(jsonArr.toString()); return jsonArr.toString(); } }
四)Adapter的创建:里面有添加和删除数据的方法,还有获得Context方法,非常有用。
public class AtyMessageCommentListAdapter extends BaseAdapter { private Context context; public Context getContext() { return context; } public AtyMessageCommentListAdapter(Context context) { this.context=context; } private List<Comment> comments=new ArrayList<Comment>(); @Override public int getCount() { return comments.size(); } @Override public Object getItem(int position) { return comments.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null){ convertView=LayoutInflater.from(getContext()).inflate(R.layout.aty_comments_list_cell, null); convertView.setTag(new ListCell((TextView)convertView.findViewById(R.id.tvCellLabel))); } ListCell lc=(ListCell) convertView.getTag(); Comment comment=(Comment) getItem(position); lc.getTvCellLabel().setText(comment.getContent()); return convertView; } public void addAll(List<Comment> data){ comments.addAll(data); notifyDataSetChanged(); } public void clear(){ comments.clear(); notifyDataSetChanged(); } private static class ListCell{ private TextView tvCellLabel; public ListCell(TextView tvCellLabel){ this.tvCellLabel=tvCellLabel; } public TextView getTvCellLabel() { return tvCellLabel; } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。