Android先後端gson傳輸數據和listview獲取position

這個暑假學校安排一個月的實訓,內容就是,一個團隊開發一個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()方法,發送給數據庫。

相關文章
相關標籤/搜索