亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Android前后端gson傳輸數(shù)據(jù)和listview獲取position

William_Sang / 2117人閱讀

摘要:如何刪除中的某一項(xiàng),之后更新該并獲取到該項(xiàng)的信息。遇到這個(gè)問(wèn)題是在要實(shí)現(xiàn)收藏列表的刪除時(shí),收藏列表就是一個(gè)在這個(gè)上有一個(gè)刪除,要在點(diǎn)擊這個(gè)時(shí)刪除這個(gè)位置的,并且獲取到這個(gè)中店鋪的等信息,從而發(fā)送給后端,將數(shù)據(jù)庫(kù)中信息一并刪除。

這個(gè)暑假學(xué)校安排一個(gè)月的實(shí)訓(xùn),內(nèi)容就是,一個(gè)團(tuán)隊(duì)開發(fā)一個(gè)app,相信對(duì)于有經(jīng)驗(yàn)的人來(lái)說(shuō)是很簡(jiǎn)單的事,但是我在此之前從來(lái)沒(méi)有接觸過(guò)Android,java基礎(chǔ)也接近于0,所以開發(fā)過(guò)程中遇到了很多問(wèn)題,剛好項(xiàng)目經(jīng)理要求我們寫寫技術(shù)總結(jié),就把寫好的東西發(fā)到這里,當(dāng)作記錄吧。

1、 如何在前后端之間進(jìn)行數(shù)據(jù)的傳輸
這是最初擺在我面前的一道難題,具體來(lái)說(shuō)問(wèn)題是這樣的:如何獲取到手機(jī)前端中的數(shù)據(jù)?如何將它發(fā)送給后端?如何獲取后端數(shù)據(jù)庫(kù)反饋到前端的信息?

第一個(gè)問(wèn)題比較簡(jiǎn)單,獲取前端的數(shù)據(jù)主要是來(lái)自TextView或者SP文件,如何獲取TextView的數(shù)據(jù)就不需要說(shuō)了,獲取Sp文件中的數(shù)據(jù)則需要用到一些SharedPreference中的函數(shù)

SharedPreferences pref = getSharedPreferences("user_data",MODE_PRIVATE);

也是很簡(jiǎn)單的。
對(duì)于第二個(gè)問(wèn)題,方法應(yīng)該是很多的,但是目前會(huì)用的只有老師教的方法,通過(guò)http協(xié)議作為通信方式,用gson包裝數(shù)據(jù),具體代碼就像這樣的:

String path = "http://" + ip.ip + "/Hello_Web/loginServlet";
path = path + "?&account=" + account + "&password=" + passwd;
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

這是實(shí)現(xiàn)登錄模塊的,其中path也就是http通信的表單,表單格式一般是:

http://192.168.1.102:8080/Hello_Web/ loginServlet?+……

其中192.168.1.102:8080是我們后端的ip端口,也就是阿黃電腦的ip,Hello_Web/ loginServlet是后端處理登錄事件的Servlet名稱,在”?”之后要寫的則是要傳輸?shù)臄?shù)據(jù)名稱和內(nèi)容,比如”&account=”+account,&account是一個(gè)自己定義的名字,在后端會(huì)通過(guò)這個(gè)名稱來(lái)獲取數(shù)據(jù),數(shù)據(jù)也就是account的值;如果要傳輸?shù)氖且慌鷶?shù)據(jù)的話,通過(guò)這種方式一個(gè)一個(gè)填太麻煩了,那么就要用到gson了,gson是json的一個(gè)變種吧,比如可以用gson封裝一個(gè)對(duì)象的數(shù)據(jù),甚至是一個(gè)列表的數(shù)據(jù),都是很方便的。

第三個(gè)問(wèn)題的話,如果不牽涉到圖片,也是比較簡(jiǎn)單的,如果想要知道圖片我們是怎么處理的話,建議去看其他幾位組員的博客。
因?yàn)楹蠖嗽谔幚戆l(fā)送反饋時(shí),一般是通過(guò)outprint(data),data一般是一個(gè)字符串,前端在接收這個(gè)數(shù)據(jù)時(shí),需要一連串的處理,才能獲取到這個(gè)字符串,比如:

URLConnection conn = url.openConnection;
InputStream stream = conn.getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader br = new BufferedReader(reader);
str = br.readLine();

通過(guò)這樣一系列的流操作,字節(jié)轉(zhuǎn)換,最終獲取到的str也就是后端返回的數(shù)據(jù),至于怎么把這個(gè)返回的數(shù)據(jù)變成我們要顯示到前端的東西,又是另外一個(gè)問(wèn)題了。

2、 如何刪除ListView中的某一項(xiàng),之后更新該ListView并獲取到該項(xiàng)的信息。
遇到這個(gè)問(wèn)題是在要實(shí)現(xiàn)收藏列表的刪除時(shí),收藏列表就是一個(gè)listview,在這個(gè)listview上有一個(gè)刪除button,要在點(diǎn)擊這個(gè)button時(shí)刪除這個(gè)位置的listview,并且獲取到這個(gè)listview中店鋪的id等信息,從而發(fā)送給后端,將數(shù)據(jù)庫(kù)中信息一并刪除。
首先,需要自定義一個(gè)atapter來(lái)適配這個(gè)listview,這個(gè)adapter需要有OnClickListener接口:

 public class ContentAdapter extends BaseAdapter implements OnClickListener{}

并且需要有自定義接口,用于回調(diào)按鈕點(diǎn)擊事件到Activity :

private Callback mCallback;

    public interface Callback {
        public void click(View v);
    }

響應(yīng)按鈕點(diǎn)擊事件,調(diào)用子定義接口,并傳入View:

    @Override
    public void onClick(View v) {
        mCallback.click(v);
    }

在Activity中:

public class CollectStoreActivity extends Activity implements OnItemClickListener,Callback{}

要有CallBack的接口,同時(shí)在Activity中重寫click()方法:

 @Override
public void click(final View v) {

        final int position1 = (Integer)v.getTag();
        new AlertDialog.Builder(CollectStoreActivity.this).setTitle("提示信息").setMessage("確認(rèn)要取消收藏嗎?")
                .setCancelable(false).setPositiveButton("確認(rèn)", 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("您當(dāng)前沒(méi)有收藏店鋪");
                    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();

就可以實(shí)現(xiàn)實(shí)時(shí)的刪除后更新listview,之后再將這個(gè)list2的內(nèi)容寫入Sp文件,與之前的信息比較得出刪除的店鋪的id,重寫onBackPressed()方法,發(fā)送給數(shù)據(jù)庫(kù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64955.html

相關(guān)文章

  • 【騰訊Bugly干貨分享】Android ListView與RecyclerView對(duì)比淺析--緩存

    摘要:數(shù)據(jù)源頻繁更新的場(chǎng)景,如彈幕等的優(yōu)勢(shì)會(huì)非常明顯進(jìn)一步來(lái)講,結(jié)論是列表頁(yè)展示界面,需要支持動(dòng)畫,或者頻繁更新,局部刷新,建議使用,更加強(qiáng)大完善,易擴(kuò)展其它情況如微信卡包列表頁(yè)兩者都,但在使用上會(huì)更加方便,快捷。 本文來(lái)自于騰訊bugly開發(fā)者社區(qū),非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載,原文地址:http://dev.qq.com/topic/5811d... 作者:黃寧源 一,背景 RecyclerV...

    wangzy2019 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<