這個暑假學校安排一個月的實訓,內容就是,一個團隊開發一個app,相信對於有經驗的人來講是很簡單的事,可是我在此以前歷來沒有接觸過Android,java基礎也接近於0,因此開發過程當中遇到了不少問題,恰好項目經理要求咱們寫寫技術總結,就把寫好的東西發到這裏,看成記錄吧。前端
一、 如何在先後端之間進行數據的傳輸
這是最初擺在我面前的一道難題,具體來講問題是這樣的:如何獲取到手機前端中的數據?如何將它發送給後端?如何獲取後端數據庫反饋到前端的信息?java
第一個問題比較簡單,獲取前端的數據主要是來自TextView或者SP文件,如何獲取TextView的數據就不須要說了,獲取Sp文件中的數據則須要用到一些SharedPreference中的函數數據庫
SharedPreferences pref = getSharedPreferences("user_data",MODE_PRIVATE);
也是很簡單的。
對於第二個問題,方法應該是不少的,可是目前會用的只有老師教的方法,經過http協議做爲通訊方式,用gson包裝數據,具體代碼就像這樣的:json
String path = "http://" + ip.ip + "/Hello_Web/loginServlet"; path = path + "?&account=" + account + "&password=" + passwd; URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
這是實現登陸模塊的,其中path也就是http通訊的表單,表單格式通常是:後端
http://192.168.1.102:8080/Hello_Web/ loginServlet?+……
其中192.168.1.102:8080是咱們後端的ip端口,也就是阿黃電腦的ip,Hello_Web/ loginServlet是後端處理登陸事件的Servlet名稱,在」?」以後要寫的則是要傳輸的數據名稱和內容,好比」&account=」+account,&account是一個本身定義的名字,在後端會經過這個名稱來獲取數據,數據也就是account的值;若是要傳輸的是一批數據的話,經過這種方式一個一個填太麻煩了,那麼就要用到gson了,gson是json的一個變種吧,好比能夠用gson封裝一個對象的數據,甚至是一個列表的數據,都是很方便的。app
第三個問題的話,若是不牽涉到圖片,也是比較簡單的,若是想要知道圖片咱們是怎麼處理的話,建議去看其餘幾位組員的博客。
由於後端在處理髮送反饋時,通常是經過outprint(data),data通常是一個字符串,前端在接收這個數據時,須要一連串的處理,才能獲取到這個字符串,好比:ide
URLConnection conn = url.openConnection; InputStream stream = conn.getInputStream(); InputStreamReader reader = new InputStreamReader(stream); BufferedReader br = new BufferedReader(reader); str = br.readLine();
經過這樣一系列的流操做,字節轉換,最終獲取到的str也就是後端返回的數據,至於怎麼把這個返回的數據變成咱們要顯示到前端的東西,又是另一個問題了。函數
二、 如何刪除ListView中的某一項,以後更新該ListView並獲取到該項的信息。
遇到這個問題是在要實現收藏列表的刪除時,收藏列表就是一個listview,在這個listview上有一個刪除button,要在點擊這個button時刪除這個位置的listview,而且獲取到這個listview中店鋪的id等信息,從而發送給後端,將數據庫中信息一併刪除。
首先,須要自定義一個atapter來適配這個listview,這個adapter須要有OnClickListener接口:ui
public class ContentAdapter extends BaseAdapter implements OnClickListener{}
而且須要有自定義接口,用於回調按鈕點擊事件到Activity :this
private Callback mCallback; public interface Callback { public void click(View v); }
響應按鈕點擊事件,調用子定義接口,並傳入View:
@Override public void onClick(View v) { mCallback.click(v); }
在Activity中:
public class CollectStoreActivity extends Activity implements OnItemClickListener,Callback{}
要有CallBack的接口,同時在Activity中重寫click()方法:
@Override public void click(final View v) { final int position1 = (Integer)v.getTag(); new AlertDialog.Builder(CollectStoreActivity.this).setTitle("提示信息").setMessage("確認要取消收藏嗎?") .setCancelable(false).setPositiveButton("確認", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.out.println("----------------int the click: "+v.getTag()); list2.remove(position1); contentAdapter.notifyDataSetChanged(); lv.invalidate(); if (list2.size()==0) { collect_tv.setText("您當前沒有收藏店鋪"); collect_pic.setImageResource(R.mipmap.bg_empty); } } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); }
在這裏的:
list2.remove(position1); contentAdapter.notifyDataSetChanged(); lv.invalidate();
就能夠實現實時的刪除後更新listview,以後再將這個list2的內容寫入Sp文件,與以前的信息比較得出刪除的店鋪的id,重寫onBackPressed()方法,發送給數據庫。