摘要:如何刪除中的某一項,之后更新該并獲取到該項的信息。遇到這個問題是在要實現(xiàn)收藏列表的刪除時,收藏列表就是一個在這個上有一個刪除,要在點擊這個時刪除這個位置的,并且獲取到這個中店鋪的等信息,從而發(fā)送給后端,將數(shù)據(jù)庫中信息一并刪除。
這個暑假學(xué)校安排一個月的實訓(xùn),內(nèi)容就是,一個團隊開發(fā)一個app,相信對于有經(jīng)驗的人來說是很簡單的事,但是我在此之前從來沒有接觸過Android,java基礎(chǔ)也接近于0,所以開發(fā)過程中遇到了很多問題,剛好項目經(jīng)理要求我們寫寫技術(shù)總結(jié),就把寫好的東西發(fā)到這里,當(dāng)作記錄吧。
1、 如何在前后端之間進行數(shù)據(jù)的傳輸
這是最初擺在我面前的一道難題,具體來說問題是這樣的:如何獲取到手機前端中的數(shù)據(jù)?如何將它發(fā)送給后端?如何獲取后端數(shù)據(jù)庫反饋到前端的信息?
第一個問題比較簡單,獲取前端的數(shù)據(jù)主要是來自TextView或者SP文件,如何獲取TextView的數(shù)據(jù)就不需要說了,獲取Sp文件中的數(shù)據(jù)則需要用到一些SharedPreference中的函數(shù)
SharedPreferences pref = getSharedPreferences("user_data",MODE_PRIVATE);
也是很簡單的。
對于第二個問題,方法應(yīng)該是很多的,但是目前會用的只有老師教的方法,通過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();
這是實現(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是一個自己定義的名字,在后端會通過這個名稱來獲取數(shù)據(jù),數(shù)據(jù)也就是account的值;如果要傳輸?shù)氖且慌鷶?shù)據(jù)的話,通過這種方式一個一個填太麻煩了,那么就要用到gson了,gson是json的一個變種吧,比如可以用gson封裝一個對象的數(shù)據(jù),甚至是一個列表的數(shù)據(jù),都是很方便的。
第三個問題的話,如果不牽涉到圖片,也是比較簡單的,如果想要知道圖片我們是怎么處理的話,建議去看其他幾位組員的博客。
因為后端在處理發(fā)送反饋時,一般是通過outprint(data),data一般是一個字符串,前端在接收這個數(shù)據(jù)時,需要一連串的處理,才能獲取到這個字符串,比如:
URLConnection conn = url.openConnection; InputStream stream = conn.getInputStream(); InputStreamReader reader = new InputStreamReader(stream); BufferedReader br = new BufferedReader(reader); str = br.readLine();
通過這樣一系列的流操作,字節(jié)轉(zhuǎn)換,最終獲取到的str也就是后端返回的數(shù)據(jù),至于怎么把這個返回的數(shù)據(jù)變成我們要顯示到前端的東西,又是另外一個問題了。
2、 如何刪除ListView中的某一項,之后更新該ListView并獲取到該項的信息。
遇到這個問題是在要實現(xiàn)收藏列表的刪除時,收藏列表就是一個listview,在這個listview上有一個刪除button,要在點擊這個button時刪除這個位置的listview,并且獲取到這個listview中店鋪的id等信息,從而發(fā)送給后端,將數(shù)據(jù)庫中信息一并刪除。
首先,需要自定義一個atapter來適配這個listview,這個adapter需要有OnClickListener接口:
public class ContentAdapter extends BaseAdapter implements OnClickListener{}
并且需要有自定義接口,用于回調(diào)按鈕點擊事件到Activity :
private Callback mCallback; public interface Callback { public void click(View v); }
響應(yīng)按鈕點擊事件,調(diào)用子定義接口,并傳入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("您當(dāng)前沒有收藏店鋪"); 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();
就可以實現(xiàn)實時的刪除后更新listview,之后再將這個list2的內(nèi)容寫入Sp文件,與之前的信息比較得出刪除的店鋪的id,重寫onBackPressed()方法,發(fā)送給數(shù)據(jù)庫。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64955.html
摘要:數(shù)據(jù)源頻繁更新的場景,如彈幕等的優(yōu)勢會非常明顯進一步來講,結(jié)論是列表頁展示界面,需要支持動畫,或者頻繁更新,局部刷新,建議使用,更加強大完善,易擴展其它情況如微信卡包列表頁兩者都,但在使用上會更加方便,快捷。 本文來自于騰訊bugly開發(fā)者社區(qū),非經(jīng)作者同意,請勿轉(zhuǎn)載,原文地址:http://dev.qq.com/topic/5811d... 作者:黃寧源 一,背景 RecyclerV...
閱讀 3124·2023-04-25 15:44
閱讀 1890·2019-08-30 13:11
閱讀 2855·2019-08-30 11:11
閱讀 3076·2019-08-29 17:21
閱讀 1323·2019-08-29 15:38
閱讀 966·2019-08-29 12:49
閱讀 1812·2019-08-28 18:19
閱讀 3237·2019-08-26 14:01