记在两周Android实训之后
正月初十回校,十一開始實訓課程。要求是在兩周之后交出一個Android APP。
對于Android,我的印象就是跟java一樣,但是沒搞過。
第一周,java,從數據類型到講到servlet,中間講了集合、線程、IO、單例模式,總之是撈干的來。
第一周結束,也算是收獲頗豐,撿起了扔下兩年的代碼,因為是學習就放棄了使用框架的想法,自己試著用反射機制簡單的封裝了servlet。長時間不寫代碼的感受是,對于持有其他對象引用的這個事,經常會忘記初始化就拿來用了,報錯基本都是空指針異常。
第二周,Android。
其實怎么看都跟WEB類似,Android的前端跟WEB的前端并沒有太多區別。給組件一個id,在相應的activity中獲取組件,對組件進行監聽,獲取內容。其實Android的組件都很成熟了,那些看起來炫酷的東西,Android本身都已經封裝好了,拿來用就是了。
Android前端設計的時候跟WEB不同的是,受限于屏幕大小,我們需要把更多的事件放到同一個組件中。比如說一個搜索框,在WEB中我們可以用一個下拉框來控制搜索內容的類別,但在WEB中這并不適用,如果你在應用中見到搜索框加下拉選擇類型,這種軟件還是放棄吧,辣眼睛。合適的做法是你可以在搜索框下加入幾個大方美觀的標簽,搜索的同時獲取標簽內容。另一個就是你在響應搜索事件后,搜索多張表,浪費點時間,但卻簡化了用戶的操作。
另一個遇到的問題是Android studio 對于前端頁面報錯不明顯。如果你的布局里有多個組件,而你又不小心忘了寫oritentation,很不幸有些東西會顯示不出來。這個問題讓我誤以為我的Intent沒有把參數傳過來,折騰了好久(哭)。
對于APP的網絡連接,我們使的是老控件。
import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map;/*** Created by Administrator on 2018/3/9.*/public class NetworkUtil {public static final String BASE_URL = "http://192.168.3.69:8080/networkBack/";public static final String QUERY_PERSON = BASE_URL + "QueryAllServlet";public static final String PAGE_PERSON = BASE_URL + "PageQueryServlet";public static final String INSERT_PERSON = BASE_URL + "InsertPerServlet";public static JSONObject getJSONByURL(String urlStr) throws IOException, JSONException {return new JSONObject(getDataByURL(urlStr));}public static JSONArray getJSONArrByURL(String urlStr) throws IOException, JSONException {return new JSONArray(getDataByURL(urlStr));}public static String getDataByURL(String urlStr) throws IOException {//通過地址創建URL對象URL url = new URL(urlStr);//建立連接URLConnection conn = url.openConnection();//接收返回的數據流InputStream is = conn.getInputStream();//讀取返回的內容BufferedReader br = new BufferedReader(new InputStreamReader(is));StringBuffer buffer = new StringBuffer();String line = null;while ((line = br.readLine()) != null) {buffer.append(line);}br.close();return buffer.toString();}public static String postDataByUrl(String urlStr, Map<String, String> map) throws IOException {HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost(urlStr);List<NameValuePair> list = new ArrayList<>();Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();while(iter.hasNext()) {Map.Entry<String, String> entry = iter.next();NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue());list.add(pair);}post.setEntity(new UrlEncodedFormEntity(list));HttpResponse response = client.execute(post);return EntityUtils.toString(response.getEntity());} }這里犯得另一個錯誤是在后臺返回數據時寫成out.println();
????????多了一個換行符,對返回結果進行字符串匹配時,一直不對,我差點就懷疑人生了。
結尾附上另外兩個封裝代碼(數據庫和servlet):
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List;public class DBUtil {private String url = "jdbc:mysql://localhost/xjtuse";private String user = "root";private String password = "root";Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//μ¥áD?£ê?private static final DBUtil dbutil = new DBUtil();private DBUtil(){}public static DBUtil getInstace(){return dbutil;}//??è?êy?Y?aá??ópublic Connection getConnection() {try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(url, user, password);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}//2é?ˉpublic ResultSet query(String sql, List<Object> params){try {ps = conn.prepareStatement(sql);if(params != null && params.size() > 0){for(int i = 0; i < params.size(); i++){ps.setObject(i + 1, params.get(i));}}rs = ps.executeQuery();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return rs;}//DT???üD?public void update(String sql, List<Object> params){try {ps = conn.prepareStatement(sql);if(params != null && params.size() > 0){for (int i = 0; i < params.size(); i++){ps.setObject(i + 1, params.get(i));}}ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//1?±?á??ópublic void close(){try {if(rs != null){rs.close();}if(ps != null){ps.close();}if(conn != null){conn.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class BasicServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");String methodname = request.getParameter("methodname");//??è?μ±?°ààμ?è?àà??Class clazz = this.getClass();try {//·′é???μ?·?·¨Method method = clazz.getMethod(methodname, HttpServletRequest.class, HttpServletResponse.class);//·′é?μ÷ó?String path = (String)method.invoke(this, request, response);if(path != null && !path.equals("")){request.getRequestDispatcher(path).forward(request, response);return;}} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }
總結
以上是生活随笔為你收集整理的记在两周Android实训之后的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 祝贺JeecgBoot获评为2019年度
- 下一篇: 亿级流量 | 蚂蚁金服分布式事务实践解析