listview加载数据前10行需要下拉才显示数据

Listview数据量大,刚加载数据的时候,1-10行只显示布局不显示数据,往下拉才能慢慢显示1-10行的数据,这是为什么?![图片说明](https://img-ask.csdn.net/upload/201604/15/1460709492_661352.png)图片说明

2个回答

没怎么用过SimpleAdapter,推荐你用ArrayAdapter,都可以解决的

查查使用分页吧 效率高 尤其针对大量数据显示

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
安卓 listview加载数据库中的数据优化问题
listview加载数据库中的数据,已经用了创建ViewHolder静态类的方法优化了 adapter但依然会延迟,加载后有3800个item 每一个item 都加载了三或四个数据 数据库是本地的 还有就是有搜索功能貌似用不了下拉刷新的方式吧。。想请教一下这零点几秒的延迟要如何优化出来呢?
能不能在下拉框中添加gridview或者listview控件?
能不能在下拉框中添加gridview或者listview控件?下拉框支持选择显示多列的数据怎么做?能不能显示下拉表?
listview使用setOnScrollListener加载数据库数据的使用方法
用listview使用Cursor加载多条数据后,进入界面会有短暂的卡顿之后再显示出列表,现在项优化一下看了网上的方法说用setOnScrollListener方法先加载出一个数量的数据下拉列表时再继续加载,但是没有找到具体的方法啊,我在activity里面就是 getActivity().getLoaderManager().initLoader(01, null, this);加载了一下要怎么实现先加载固定数目的数据呢? 求大神指点一下。。
pull-to-refresh如何下拉刷新服务器更改后的数据?
我有一个LISTVIEW,从服务器获取JSON来显示数据,如果我在数据库里更改了一条数 据(不是添加或者删除),下拉的时候怎么判断数据发生了改变?还是只能重新加载一 次数据? 网上看了好多都是定义了一个string[]来模仿数据变化。我想实现的是数据库数据改变 下拉刷新能更新数据,数据库中添加数据,下拉刷新能再LISTVIEW的上面添加数据而不 是重新加载一次Adapter。 求助大神!
android ListView一直添加数据导致OOM怎么办?
给listView设置了下拉刷新,但是发现如果我一直刷新,一直添加数据的话,内存使用会越来越大,最后导致OOM?怎么解决啊?
listview中item下拉出现空指针和outofindex问题 求大神们指点
问题环境:写了一个listview,其中有7条数据,一开始能在一个屏幕内显示出来,但我对item添加了点击事件,点击后会在自己下方出现一个小操作界面,再次点击则收起,因为这个小界面layout我是写的visible = gone ,点击后设置visible = visible这时listview中的下面的item会被挤下去。也就是在一个屏幕中显示不出来了。另外有一个不在listview中的按钮,一但点击,则会便利整个listview中每个子项的操作小界面中的数据修改情况进行总汇。 问题:当只显示listview中7条数据的时候,点击按钮 运行正常,当出现下拉界面未收导致7条数据不能在一个屏幕中显示的时候就会报异常(我用一个大屏平板测过 ,能在一个屏幕中显示出来的话就不会报异常) 我想过在点击按钮的时候能不能把所有的下拉界面收起,但我不知道用什么方法。。。。求大神们指点
android ListView 做下拉刷新 下拉跳到第一项怎么解决
listView.setonRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { Log.e(TAG, "---下拉刷新---"); new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { try { mylineslistlist.clear(); mylinesorderlist.clear(); list.clear(); getMylines(0); } catch (Exception e) { e.printStackTrace(); } return null; } protected void onPostExecute(Void result) { adapter.notifyDataSetChanged(); listView.onRefreshComplete(); } }.execute(); } }); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(final AbsListView view, int scrollState) { listView.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (list.size() == 0) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(loadingLayout) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } if (scrollEnd) { // 如果是自动加载,可以在这里放置异步加载数据的代码 Log.e("LOADMORE", "loading..."); if (currentPage < pageNum) { // Log.e(TAG, "---currentPage is " + currentPage); currentPage++; // Log.e(TAG, "---currentPage is " + currentPage); handler.postDelayed(new Runnable() { @Override public void run() { // Log.d(TAG, "---loadData page is" + // currentPage); getMylines(currentPage); // listView.setSelection(view // .getLastVisiblePosition() - 1); // 设置选中项 // setLoadView("加载更多"); //恢复按钮文字 } }, 1000); } else { listView.removeFooterView(loadingLayout); } } }
ScrollView嵌套ListView的显示不全及滑动问题
**需求描述:**要在一个页面显示比较多的数据,如:旅图详情页面需要显示旅图照片、评论列表等等内容;而且页面可以上下滑动;当个人动态列表滑动到底部时,可以加载更多的评论。 如图-1: ![旅图详情页](https://img-ask.csdn.net/upload/201605/25/1464152136_262352.png) **思路分析:**因为要在一个页面显示较多的数据,且还有评论列表这样的模块,一下子想到使用ScrollView嵌套ListView,ScrollView可以上下滚动,ListView用于加载评论列表。 **发现的问题:**按照上面的思路,我做了尝试,发现两个问题:1) ListView显示不全:ListView只显示第一个。2) ListView不能上下滑动。 解决尝试:经过一番搜索,看到网上有这样的一些解决办法,本人都一一拿来尝试: a) 在ScrollView的布局文件中加入配置android:fillViewport="true",试下来后发现ListView能显示的大一些了,充满了屏幕,但是还是不能滑动显示全部的评论。 b) 用代码设置ListView的高度,即根据ListView中item数目的个数设置ListView的高度,这样滑动屏幕就能将看到所有评论。 但问题又来了:因为评论数据可能会很多,现在的做法是进入旅图详情页面时,只展示部分评论,当页面下拉到最后一条评论时,通过“上拉加载更多”的滑动方式去查询更多评论,但是发现滑动不了,ListView滑动不了。为此又经过了一番的搜索,是因为ViewGroup的事件拦截和触发机制的原因,当然可给出了一些方法,为此又做了一些尝试: c) 重写ScrollView的onInterceptTouchEvent()方法,直接返回false,即可将屏幕事件传递给子View,即可响应事件。 那么问题又来了,我只能把触摸点放在评论区域内,才能下拉加载更多,能不能触摸点在评论列表之外时,也能使评论区域上拉加载更多?另外如果想要使触摸屏幕上的任何一个点都可以往上滑动,该怎么做?因为发现当触摸点在评论列表上时,不能往上滑动,显示效果如图-2: ![评论列表](https://img-ask.csdn.net/upload/201605/25/1464151537_923980.png) 。 其实我最终想要实现的目标就像是微博的具体内容展示页那样。 当然看到网上也有推荐不要用ScrollView嵌套,而使用ListView的header。 再此,希望高手能帮忙解答下!!!
listview下拉刷新时遇到的问题
listview在第一页时往下拉,没到底部就会刷新,而第二页会拉到底部才会刷新, 到第三页时又会出现没到底部就会刷新了 package com.phone1000.exam01.activity; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.phone1000.exam01.R; import com.phone1000.exam01.adapter.MyAdapter; import com.phone1000.exam01.async.DownDataListAsyncTask; import com.phone1000.exam01.bean.Data; import com.phone1000.exam01.constant.IMyUrl; import com.phone1000.exam01.interf.OnGetDownDataListListener; public class MainActivity extends Activity implements OnGetDownDataListListener { private ListView lvShow = null; private TextView noData = null; private int index = 1; private boolean isBottom = false; private MyAdapter adapter = null; // 全局的数据列表 private List<Data> list = new ArrayList<Data>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new DownDataListAsyncTask(MainActivity.this) .execute(IMyUrl.url + index); initView(); setListener(); } private void setListener() { lvShow.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { /** * 如果isBottom为true并且手指离开屏幕, 开启新的异步任务, * 注意:开启异步任务以后要设置isBottom为false 否则,会一直每当 */ if (isBottom && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { new DownDataListAsyncTask(MainActivity.this) .execute(IMyUrl.url + ++index); isBottom = false; } } // 判断如果first+visible=total则滑到了屏幕底部,则设置isBottom为true; @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem + visibleItemCount == totalItemCount) { // Toast.makeText( // MainActivity.this, // "first***" + firstVisibleItem + "visible***" // + visibleItemCount + "total***" // + totalItemCount, Toast.LENGTH_LONG).show(); isBottom = true; } } }); } private void initView() { lvShow = (ListView) findViewById(R.id.lvShow); noData = (TextView) findViewById(R.id.NoData); lvShow.setEmptyView(noData); adapter = new MyAdapter(this.list, MainActivity.this); /** * 在这里设置适配器是只设置了一个适配器,以后到底部刷新时是在此适配器里添加数据 * 如果在回调方法里设置适配器,相当于每次调用回调方法都会给listview重新设置适配器 * 所导致的结果就是每次刷新完,都显示第一页内容 */ lvShow.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onGetDownDataList(List<Data> list) { // 每次刷新后在全局的数据列表中添加新获取到的数据 this.list.addAll(list); // 每次刷新都更新适配器中的数据 adapter.notifyDataSetChanged(); // ***************** // Toast.makeText(MainActivity.this, lvShow.getCount(), Toast.LENGTH_LONG).show(); } } ``` ```
vb中对listview1的数据进行双击 到listview2 怎么写 求各路大神指教 小弟有礼了
Option Explicit Public gObjPY As New cls_com_PY Private obj基础数据_添加套餐项目 As New cls基础数据_添加套餐项目 Public Function 加载添加套餐项目() As Long On Error GoTo 加载添加套餐项目_error Dim strsql As String, itemx As ListItem, lngI As Integer Dim rst As New ADODB.Recordset Dim lng As Long lngI = 1 '首先判断是否不是空值 If frm基础数据_添加套餐项目.cbo套餐类型.Text = "" Then GoTo Proc_Exit '根据用户选择项目类型进行加载类型项目 If frm基础数据_添加套餐项目.cbo套餐类型 = "全部" Then strsql = "select * from 基础数据_组合项目表 a ,基础数据_组合项目类型表 b where a.组合项目类型 =b.组合项目类型名称 order by b.顺序 ,a.顺序 " Else strsql = "select * from 基础数据_组合项目表 a ,基础数据_组合项目类型表 b where a.组合项目类型 =b.组合项目类型名称 " strsql = strsql & " and a.组合项目类型 ='" & frm基础数据_添加套餐项目.cbo套餐类型 & "' order by b.顺序 ,a.顺序 " End If '加载项目 frm基础数据_添加套餐项目.lv项目.ListItems.Clear If gObjDatabase.GetOneRst(strsql, rst) <> 0 Then GoTo Proc_Exit If Not rst.EOF Then Do Until rst.EOF Set itemx = frm基础数据_添加套餐项目.lv项目.ListItems.ADD(, , lngI) Call gObjControl.SetLvItemValue(frm基础数据_添加套餐项目.lv项目, itemx, "组合项目序号", Trim(rst("组合项目序号") & "")) Call gObjControl.SetLvItemValue(frm基础数据_添加套餐项目.lv项目, itemx, "组合项目名称", Trim(rst("组合项目名称") & "")) Call gObjControl.SetLvItemValue(frm基础数据_添加套餐项目.lv项目, itemx, "组合项目类型", Trim(rst("组合项目类型") & "")) lngI = lngI + 1 rst.MoveNext Loop End If '增加项目类型 strsql = "select * from 基础数据_组合项目表 order by 顺序" & vbCrLf If gObjDatabase.GetOneRst(strsql, rst) <> 0 Then GoTo Proc_Exit If Not rst.EOF Then Do Until rst.EOF frm基础数据_添加套餐项目.cbo套餐类型.AddItem Trim(rst("组合项目类型名称") & "") rst.MoveNext Loop End If Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 加载添加套餐项目_error: 加载添加套餐项目 = 1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_添加套餐项目", "Form_Load", err.Number, err.Description) End Function Public Function 加载套餐类型() As Long On Error GoTo 加载套餐类型_error Dim rst As New ADODB.Recordset, itemx As ListItem Dim strsql As String, str序号 As Long '增加全部类型 ,让用户查看全部项目 frm基础数据_添加套餐项目.cbo套餐类型.Clear frm基础数据_添加套餐项目.cbo套餐类型.AddItem "" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "全部" '增加套餐类型 strsql = "select * from 基础数据_组合项目类型表 order by 顺序" & vbCrLf If gObjDatabase.GetOneRst(strsql, rst) <> 0 Then GoTo Proc_Exit If Not rst.EOF Then Do Until rst.EOF frm基础数据_添加套餐项目.cbo套餐类型.AddItem Trim(rst("组合项目类型名称") & "") rst.MoveNext Loop End If Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 加载套餐类型_error: 加载套餐类型 = 1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_添加套餐项目", "加载组合项目类型", err.Number, err.Description) End Function Public Function 加载列表头() As Long On Error GoTo 加载列表头_error frm基础数据_添加套餐项目.lv项目.ColumnHeaders.ADD , "序号", "序号", 5000 frm基础数据_添加套餐项目.lv项目.ColumnHeaders.ADD , "组合项目名称", "组合项目名称", 8000 Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 加载列表头_error: 加载列表头 = -1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_添加套餐项目", "加载列表头", err.Number, err.Description) End Function Public Function 加载lv项目信息() As Long On Error GoTo 加载lv项目信息_error End Function Public Function 判断用户是否可以加载选中项目() As Long On Error GoTo 判断用户是否可以加载选中项目_error '用户没有选择项目 If frm基础数据_添加套餐项目.lv项目.SelectedItem Is Nothing Then 判断用户是否可以加载选中项目 = -1 GoTo Proc_Exit End If Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 判断用户是否可以加载选中项目_error: 判断用户是否可以加载选中项目 = -1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_组合项目维护", "判断用户是否可以加载选中项目", err.Number, err.Description) End Function Public Function 加载组合项目基本信息() As Long On Error GoTo 加载组合项目基本信息_error Dim rst As New ADODB.Recordset, itemx As ListItem Dim strsql As String, lngI As Long Dim str组合项目序号 As String lngI = 1 If frm基础数据_添加套餐项目.lv项目.ListItems.Count = 0 Then GoTo Proc_Exit '加载项目基本信息 str组合项目序号 = gObjControl.GetLvSelectedText(frm基础数据_添加套餐项目.lv项目, "组合项目序号") '初始化项目基本信息 'If 清空组合项目基本信息 <> 0 Then GoTo 加载组合项目基本信息_error strsql = "select * from 基础数据_组合项目表 where 组合项目序号 ='" & str组合项目序号 & "'" & vbCrLf ' ' If gObjDatabase.GetOneRst(strsql, rst) <> 0 Then GoTo Proc_Exit ' If Not rst.EOF Then ' Do Until rst.EOF ' frm基础数据_添加套餐项目.txt项目序号.Text = Trim(rst("组合项目序号") & "") ' frm基础数据_添加套餐项目.lv项目列表.Text = Trim(rst("组合项目名称") & "") ' rst.MoveNext ' Loop ' End If Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 加载组合项目基本信息_error: 加载组合项目基本信息 = -1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_添加套餐项目", "加载组合项目基本信息", err.Number, err.Description) End Function Public Function 加载下拉控件() As Long On Error GoTo 加载下拉控件_error ' frm基础数据_添加套餐项目.stb.item(0).Selected = True frm基础数据_添加套餐项目.cbo套餐类型.AddItem " " frm基础数据_添加套餐项目.cbo套餐类型.AddItem "全部" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "身高体重" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "电子血压" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "普通诊室" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "检验科室" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "超声诊室" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "影像科室" frm基础数据_添加套餐项目.cbo套餐类型.AddItem "特检科室" Proc_Exit: Call RefreshMdiStb("就绪"): Exit Function 加载下拉控件_error: 加载下拉控件 = -1 Call RefreshMdiStb("就绪"): Call gObjError.RecordError("cls基础数据_添加套餐项目", "加载下拉控件", err.Number, err.Description) End Function > ``` ```
android scrollview动态加载数据
先声明不是滑动加载更多数据,我要做一个订单的页面,scrollview里面的内容不确定是几条,如果里面嵌套listview,每个item的布局太复杂(包含很多按钮,edittext,下拉菜单等等),很容易冲突,而且item的高度可能超过了一屏幕,scrollview嵌套listview问题又很多,所以请高手帮忙,该如何实现!谢谢各位了!
做了一个listview的下拉刷新和底部自动加载,但我做完之后项目能运行,但就是始终加载不出来,求教
底下是代码 ``` package caifu.life.ZHSQ.main; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import caifu.life.ZHSQ.R; import caifu.life.ZHSQ.sqShouYeListView.AutoListView; import caifu.life.ZHSQ.sqShouYeListView.AutoListView.OnLoadListener; import caifu.life.ZHSQ.sqShouYeListView.AutoListView.OnRefreshListener; public class ShouYeActivity extends Activity implements OnRefreshListener, OnLoadListener { // 获取listview private AutoListView syListView; private listViewAdapter adapter; private ArrayList<HashMap<String, Object>> item; // 传递消息处理刷新数据 private Handler handler = new Handler(){ public void handleMessage(Message msg) { @SuppressWarnings("unchecked") ArrayList<HashMap<String, Object>> result = (ArrayList<HashMap<String, Object>>) msg.obj; switch (msg.what) { case AutoListView.REFRESH:// 刷新操作 syListView.onRefreshComplete(); item.clear(); item.addAll(result); break; case AutoListView.LOAD:// 加载 syListView.onLoadComplete(); item.addAll(result); break; } syListView.setResultSize(result.size()); adapter.notifyDataSetChanged(); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sq_message); // 获取listview syListView = (AutoListView) findViewById(R.id.shouyeListView); // 配置适配器 adapter = new listViewAdapter(this, item); // 设置适配 syListView.setAdapter(adapter); // 追加刷新与加载监听 syListView.setOnRefreshListener(this); syListView.setOnLoadListener(this); initData(); // 一个动态数组 getDate(); } // 定义一个得到数据的方法 private static ArrayList<HashMap<String, Object>> getDate() { ArrayList<HashMap<String, Object>> item = new ArrayList<HashMap<String, Object>>(); for (int i = 1; i < 4; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("touXiang", R.drawable.sylvtouxiang); map.put("yongHuMing", "第" + i + "用户"); map.put("neiRong", "第" + i + "内容"); map.put("sylv_image1", R.drawable.sylvimage1); map.put("sylv_image2", R.drawable.sylvimage2); map.put("sylv_image3", R.drawable.sylvimage3); item.add(map); } return item; } private void initData() { loadData(AutoListView.REFRESH); } private void loadData(final int what) { // 起线程获取数据 new Thread(new Runnable() { public void run() { try { Thread.sleep(700); } catch (InterruptedException e) { e.printStackTrace(); Message msg = handler.obtainMessage(); msg.what = what; msg.obj = getDate(); handler.sendMessage(msg); } } }).start(); } public void onLoad() { loadData(AutoListView.LOAD); } public void onRefresh() { loadData(AutoListView.REFRESH); } // 适配器 private class listViewAdapter extends BaseAdapter { private ViewHolder holder; private Context context; private ArrayList<HashMap<String, Object>> item; public listViewAdapter(Context context, ArrayList<HashMap<String, Object>> item) { this.item = item; this.context = context; } public int getCount() { return getDate().size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate( R.layout.activity_sq_message_item, null); // 得到各控件对象 holder.touXiang = (ImageView) convertView .findViewById(R.id.touXiang); holder.yongHuMing = (TextView) convertView .findViewById(R.id.yongHuMing); holder.neiRong = (TextView) convertView .findViewById(R.id.neiRong); holder.sylv_image1 = (ImageView) convertView .findViewById(R.id.sylv_image1); holder.sylv_image2 = (ImageView) convertView .findViewById(R.id.sylv_image2); holder.sylv_image3 = (ImageView) convertView .findViewById(R.id.sylv_image3); // 绑定viewHolder对象 convertView.setTag(holder); } else { // 取出ViewHolder对象 holder = (ViewHolder) convertView.getTag(); } holder.yongHuMing.setText(getDate().get(position).get("yongHuMing") .toString()); holder.neiRong.setText(getDate().get(position).get("neiRong") .toString()); return convertView; } public final class ViewHolder { public ImageView touXiang; public TextView yongHuMing; public TextView neiRong; public ImageView sylv_image1; public ImageView sylv_image2; public ImageView sylv_image3; } } /** 测试数据 public List<String> getData() { List<String> result = new ArrayList<String>(); Random random = new Random(); for (int i = 0; i < 10; i++) { long l = random.nextInt(10000); result.add("当前条目的ID:" + l); } return result; }*/ } ```
解析josn获得的数据在listView上
,利用PullToRefresh框架怎么实现上拉加载下拉刷新,一定要是利用框架来弄,没办法老板逼得
在fragment中使用pullToRefreshListView问题
小弟我今天在fragment中使用下拉刷新listView,在网络请求回调中设置数据适配器后不显示数据,debug发现数据加载正常,getcount方法正常调用,而getView方法不调用,请问大神们如何解决这问题,已经困扰小弟一个下午了。ps:在onCreateView中设置数据就可以显示
新手请教ListView 刷新问题
这是显示ListView的界面 package com.security.phonepolice.view; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.security.phonepolice.ContantValues; import com.security.phonepolice.R; import com.security.phonepolice.entity.Msgbean; import com.security.phonepolice.http.MyHttpclient; import com.security.phonepolice.util.SharedPreferenceUtil; import com.security.phonepolice.view.MessageManager.NotificationAdapter; import com.security.phonepolice.view.OAFileFragment.FileViewHolder; import com.security.phonepolice.view.widget.MyListView; import com.security.phonepolice.view.widget.MyListView.RefreshListener; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class OANotifyFragment extends Fragment implements OnClickListener, OnItemClickListener{ private View view; private ImageView mPreIv; private MyListView mNotifyLv; private LayoutInflater mInflater; private NotifyAdapter adapter = null; private TextView notifyUpload; private List<Msgbean> mList; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.oa_notify_ui, container, false); mInflater = inflater; init(); initEvent(); return view; } private void init() { mNotifyLv = (MyListView) view.findViewById(R.id.oa_notify_lv); } private void initEvent() { mList = new ArrayList<Msgbean>(); adapter = new NotifyAdapter(mList); mNotifyLv.setOnItemClickListener(this); mNotifyLv.setAdapter(adapter); mNotifyLv.setOnRefreshListener(new RefreshListener() { @Override public Object refreshing() { RequestParams params = new RequestParams(); params.put("action", "Message"); String serverAdd = SharedPreferenceUtil.getServerStringSP(getActivity(), "config", "serverAdd"); MyHttpclient.post(serverAdd+ContantValues.IDCARD_URL, params, new AsyncHttpResponseHandler(){ @Override public void onSuccess( int statusCode, Header[] headers, String content) { super.onSuccess(statusCode, headers, content); if (!content.equals("failed")) { Msgbean msgBean = new Msgbean(); try { JSONObject jsonObject=new JSONObject(content); msgBean.setTitle(jsonObject.getString("TITLE")); msgBean.setContent(jsonObject.getString("CONTENT")); Log.i("-----------", jsonObject.getString("TITLE")); List<Msgbean> list = new ArrayList<Msgbean>(); list.add(msgBean); mList = list; adapter.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } }else { Toast.makeText(getActivity(), "刷新失败", Toast.LENGTH_LONG).show(); } } @Override public void onFailure( Throwable error, String content) { Toast.makeText(getActivity(), "连接失败", Toast.LENGTH_LONG).show(); super.onFailure(error, content); } } ); return null; } @Override public void refreshed(Object obj) { Toast.makeText(getActivity(), "刷新完毕", Toast.LENGTH_LONG).show(); } @Override public void more() { Toast.makeText(getActivity(), "正在加载", Toast.LENGTH_LONG).show(); } }); } class NotifyAdapter extends BaseAdapter{ private List<Msgbean> list; public NotifyAdapter(List<Msgbean> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { NotifyViewHolder viewHolder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.oa_item, null); viewHolder = new NotifyViewHolder(); viewHolder.itemIv = (ImageView) convertView.findViewById(R.id.oa_item_iv); viewHolder.itemTitle = (TextView) convertView.findViewById(R.id.oa_item_title); viewHolder.itemContent = (TextView) convertView.findViewById(R.id.oa_item_content); convertView.setTag(viewHolder); }else { viewHolder = (NotifyViewHolder) convertView.getTag(); } viewHolder.itemIv.setImageResource(R.drawable.notification_small); viewHolder.itemTitle.setText(list.get(position).getTitle()); viewHolder.itemContent.setText(list.get(position).getContent()); return convertView; } } public static class NotifyViewHolder{ public ImageView itemIv; public TextView itemTitle; public TextView itemContent; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = null; if (position > 0) { //去服务器拉取警情的详细信息 intent = new Intent(); intent.putExtra("InfoTag", "OANotify"); intent.setClass(getActivity(), MessageDetail.class); startActivity(intent); } } } 这是在网上找到的自定义的ListView package com.security.phonepolice.view.widget; import java.text.SimpleDateFormat; import java.util.Date; import com.security.phonepolice.R; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; /** * 下拉刷新,底部更多 * */ public class MyListView extends ListView implements OnScrollListener{ private float mDownY; private float mMoveY; private int mHeaderHeight; private int mCurrentScrollState; private final static int NONE_PULL_REFRESH = 0; //正常状态 private final static int ENTER_PULL_REFRESH = 1; //进入下拉刷新状态 private final static int OVER_PULL_REFRESH = 2; //进入松手刷新状态 private final static int EXIT_PULL_REFRESH = 3; //松手后反弹和加载状态 private int mPullRefreshState = 0; //记录刷新状态 private final static int REFRESH_BACKING = 0; //反弹中 private final static int REFRESH_BACED = 1; //达到刷新界限,反弹结束后 private final static int REFRESH_RETURN = 2; //没有达到刷新界限,返回 private final static int REFRESH_DONE = 3; //加载数据结束 private LinearLayout mHeaderLinearLayout = null; private LinearLayout mFooterLinearLayout = null; private TextView mHeaderTextView = null; private TextView mHeaderUpdateText = null; private ImageView mHeaderPullDownImageView = null; private ImageView mHeaderReleaseDownImageView = null; private ProgressBar mHeaderProgressBar = null; private TextView mFooterTextView = null; private ProgressBar mFooterProgressBar = null; private SimpleDateFormat mSimpleDateFormat; private Object mRefreshObject = null; private RefreshListener mRefreshListener = null; public void setOnRefreshListener(RefreshListener refreshListener) { this.mRefreshListener = refreshListener; } public MyListView(Context context) { this(context, null); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } void init(final Context context) { mHeaderLinearLayout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.refresh_list_header, null); addHeaderView(mHeaderLinearLayout); mHeaderTextView = (TextView) findViewById(R.id.refresh_list_header_text); mHeaderUpdateText = (TextView) findViewById(R.id.refresh_list_header_last_update); mHeaderPullDownImageView = (ImageView) findViewById(R.id.refresh_list_header_pull_down); mHeaderReleaseDownImageView = (ImageView) findViewById(R.id.refresh_list_header_release_up); mHeaderProgressBar = (ProgressBar) findViewById(R.id.refresh_list_header_progressbar); mFooterLinearLayout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.refresh_list_footer, null); addFooterView(mFooterLinearLayout); mFooterProgressBar = (ProgressBar) findViewById(R.id.refresh_list_footer_progressbar); mFooterTextView = (TextView) mFooterLinearLayout.findViewById(R.id.refresh_list_footer_text); mFooterLinearLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if ("加载更多".equals(mFooterTextView.getText())) { mFooterTextView.setText("正在加载"); mFooterProgressBar.setVisibility(View.VISIBLE); if (mRefreshListener != null) { mRefreshListener.more(); } } } }); setSelection(1); setOnScrollListener(this); measureView(mHeaderLinearLayout); mHeaderHeight = mHeaderLinearLayout.getMeasuredHeight(); mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); mHeaderUpdateText.setText("下拉刷新"+ mSimpleDateFormat.format(new Date())); } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mDownY = ev.getY(); break; case MotionEvent.ACTION_MOVE: mMoveY = ev.getY(); if (mPullRefreshState == OVER_PULL_REFRESH) { mHeaderLinearLayout.setPadding(mHeaderLinearLayout.getPaddingLeft(), (int)((mMoveY - mDownY)/3), mHeaderLinearLayout.getPaddingRight(), mHeaderLinearLayout.getPaddingBottom()); } break; case MotionEvent.ACTION_UP: //when you action up, it will do these: //1. roll back util header topPadding is 0 //2. hide the header by setSelection(1) if (mPullRefreshState == OVER_PULL_REFRESH || mPullRefreshState == ENTER_PULL_REFRESH) { new Thread() { public void run() { Message msg; while(mHeaderLinearLayout.getPaddingTop() > 1) { msg = mHandler.obtainMessage(); msg.what = REFRESH_BACKING; mHandler.sendMessage(msg); try { sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } msg = mHandler.obtainMessage(); if (mPullRefreshState == OVER_PULL_REFRESH) { msg.what = REFRESH_BACED; } else { msg.what = REFRESH_RETURN; } mHandler.sendMessage(msg); }; }.start(); } break; } return super.onTouchEvent(ev); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (mCurrentScrollState == SCROLL_STATE_TOUCH_SCROLL && firstVisibleItem == 0 && (mHeaderLinearLayout.getBottom() >= 0 && mHeaderLinearLayout.getBottom() < mHeaderHeight)) { //进入且仅进入下拉刷新状态 if (mPullRefreshState == NONE_PULL_REFRESH) { mPullRefreshState = ENTER_PULL_REFRESH; } } else if (mCurrentScrollState == SCROLL_STATE_TOUCH_SCROLL && firstVisibleItem == 0 && (mHeaderLinearLayout.getBottom() >= mHeaderHeight)) { //下拉达到界限,进入松手刷新状态 if (mPullRefreshState == ENTER_PULL_REFRESH || mPullRefreshState == NONE_PULL_REFRESH) { mPullRefreshState = OVER_PULL_REFRESH; mDownY = mMoveY; //为下拉1/3折扣效果记录开始位置 mHeaderTextView.setText("松手刷新");//显示松手刷新 mHeaderPullDownImageView.setVisibility(View.GONE);//隐藏"下拉刷新" mHeaderReleaseDownImageView.setVisibility(View.VISIBLE);//显示向上的箭头 } } else if (mCurrentScrollState == SCROLL_STATE_TOUCH_SCROLL && firstVisibleItem != 0) { //不刷新了 if (mPullRefreshState == ENTER_PULL_REFRESH) { mPullRefreshState = NONE_PULL_REFRESH; } } else if (mCurrentScrollState == SCROLL_STATE_FLING && firstVisibleItem == 0) { //飞滑状态,不能显示出header,也不能影响正常的飞滑 //只在正常情况下才纠正位置 if (mPullRefreshState == NONE_PULL_REFRESH) { setSelection(1); } } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { mCurrentScrollState = scrollState; } @Override public void setAdapter(ListAdapter adapter) { super.setAdapter(adapter); setSelection(1); } private void measureView(View child) { ViewGroup.LayoutParams p = child.getLayoutParams(); if (p == null) { p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width); int lpHeight = p.height; int childHeightSpec; if (lpHeight > 0) { childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); } else { childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } child.measure(childWidthSpec, childHeightSpec); } private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case REFRESH_BACKING: mHeaderLinearLayout.setPadding(mHeaderLinearLayout.getPaddingLeft(), (int) (mHeaderLinearLayout.getPaddingTop()*0.75f), mHeaderLinearLayout.getPaddingRight(), mHeaderLinearLayout.getPaddingBottom()); break; case REFRESH_BACED: mHeaderTextView.setText("正在加载..."); mHeaderProgressBar.setVisibility(View.VISIBLE); mHeaderPullDownImageView.setVisibility(View.GONE); mHeaderReleaseDownImageView.setVisibility(View.GONE); mPullRefreshState = EXIT_PULL_REFRESH; new Thread() { public void run() { if (mRefreshListener != null) { mRefreshObject = mRefreshListener.refreshing(); } Message msg = mHandler.obtainMessage(); msg.what = REFRESH_DONE; mHandler.sendMessage(msg); }; }.start(); break; case REFRESH_RETURN: mHeaderTextView.setText("下拉刷新"); mHeaderProgressBar.setVisibility(View.INVISIBLE); mHeaderPullDownImageView.setVisibility(View.VISIBLE); mHeaderReleaseDownImageView.setVisibility(View.GONE); mHeaderLinearLayout.setPadding(mHeaderLinearLayout.getPaddingLeft(), 0, mHeaderLinearLayout.getPaddingRight(), mHeaderLinearLayout.getPaddingBottom()); mPullRefreshState = NONE_PULL_REFRESH; setSelection(1); break; case REFRESH_DONE: mHeaderTextView.setText("下拉刷新"); mHeaderProgressBar.setVisibility(View.INVISIBLE); mHeaderPullDownImageView.setVisibility(View.VISIBLE); mHeaderReleaseDownImageView.setVisibility(View.GONE); mHeaderUpdateText.setText("最新更新"+ mSimpleDateFormat.format(new Date())); mHeaderLinearLayout.setPadding(mHeaderLinearLayout.getPaddingLeft(), 0, mHeaderLinearLayout.getPaddingRight(), mHeaderLinearLayout.getPaddingBottom()); mPullRefreshState = NONE_PULL_REFRESH; setSelection(1); if (mRefreshListener != null) { mRefreshListener.refreshed(mRefreshObject); } break; default: break; } } }; public interface RefreshListener { Object refreshing(); void refreshed(Object obj); void more(); } public void finishFootView() { mFooterProgressBar.setVisibility(View.GONE); mFooterTextView.setText("更多"); } public void addFootView() { if (getFooterViewsCount() == 0) { addFooterView(mFooterLinearLayout); } } public void removeFootView() { removeFooterView(mFooterLinearLayout); } } 这是实体类: package com.security.phonepolice.entity; public class Msgbean { private int id; private String title; private String content; private String relName; private String relTime; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getRelName() { return relName; } public void setRelName(String relName) { this.relName = relName; } public String getRelTime() { return relTime; } public void setRelTime(String relTime) { this.relTime = relTime; } } 走到这一步法mNotifyLv.setOnRefreshListener(new RefreshListener() 就停了 为什么刷新的时候就是不走接口中的refreshing()方法。求大神指教啊!
android PullToRefreshListView报错
我在使用PullToRefreshListView的时候,发现在我下拉刷新的时候,如果我快速的点击item,就会报错: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(16908298, class com.handmark.pulltorefresh.library.PullToRefreshListView$InternalListViewSDK9) with Adapter(class android.widget.HeaderViewListAdapter)] 但是当我在adpater中,给item添加了点击事件后,就不会报错了,这是为什么? 我的代码逻辑是这样的:首先在activity中声明了list用来存储数据,然后用pulltorefreshlistview.setAdapter,下拉刷新的时候,模拟网络加载,启动了一个Asyctask来给list添加数据,添加完成后再用notifydatasetchanged,如果在正在刷新的话,我会直接pulltorefreshlistview.onfreshcompete。在adapter中,假如我没有给整个item布局添加点击事件的话,那么在正在刷新的时候,我快速的点击item就会报上面的错误。如果我在adapter中给整个item添加了点击事件的话,就不会报错,这是为什么?
自学Android开发 在模拟器运行闪退
初学者自写的程序 ,但是在模拟器下运行闪退!!该怎么改呀?? package com.example.work3; import java.util.ArrayList; import java.util.List; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.TabActivity; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.StrictMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.TabHost; import android.widget.TextView; import android.os.Build; public class MainActivity extends TabActivity { private TabHost tabhost; private ListView listview; private ArrayAdapter<String> arr_adapter; private Spinner spinner; private List<String>list; private ArrayAdapter<String> adapter; private EditText et1,et2; private Button bt; String name; String value; String style; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); et1=(EditText) findViewById(R.id.editText1); et2=(EditText) findViewById(R.id.editText2); bt=(Button) findViewById(R.id.button1); setContentView(R.layout.activity_main); tabhost=getTabHost(); tabhost.addTab(tabhost.newTabSpec("菜单一").setIndicator("首页").setContent(R.id.tab1)); tabhost.addTab(tabhost.newTabSpec("菜单二").setIndicator("新增").setContent(R.id.tab2)); tabhost.addTab(tabhost.newTabSpec("菜单三").setIndicator("账单").setContent(R.id.tab3)); //按钮监听 提取信息 bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub name = et1.getText().toString(); value = et2.getText().toString(); style = spinner.getSelectedItem().toString(); } }); listview = (ListView) findViewById(R.id.listview); //新建适配器 String[]arr_data={"数据1","数据2","数据3","数据4","数据5"}; //ArrayAdapter(上下文,当前ListView加载的每一个列表项所对应的布局文件,数据源) arr_adapter =new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arr_data); listview.setAdapter(arr_adapter); spinner=(Spinner) findViewById(R.id.spinner); //数据源 String[]list = {"1.日常食品支出","2.人情世故支出","3.出差旅游支出","4.服饰鞋帽支出","5.生活用品支出","6.其他支出"}; //新建适配器 adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); //设置下拉样式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 spinner.setAdapter(adapter); } //退出对话框 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { // 创建退出对话框 AlertDialog isExit = new AlertDialog.Builder(this).create(); // 设置对话框标题 isExit.setTitle("系统提示"); // 设置对话框消息 isExit.setMessage("确定要退出吗"); // 添加选择按钮并注册监听 isExit.setButton("确定", listener); isExit.setButton2("取消", listener); // 显示对话框 isExit.show(); } return false; } /**监听对话框里面的button点击事件*/ DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序 finish(); break; case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框 break; default: break; } } }; }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
python沙箱逃逸
沙箱逃逸是CTF和实际场景中经常遇到的一种情况。需要利用python的特性来实现逃逸。本文详细介绍了关于python逃逸的基础以及一些构造payload方法,并且附加习题提供练习。
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问