怎么监听listview里的item上的按钮?

Android listview的item里面有个按钮,item是另外一个XML文件,怎么给这个按钮注册监听事件?

5个回答

在适配器(Adapter)的getView函数中通过findViewById(id)函数找到你需要绑定事件的按钮,然后通过setOnClickListener绑定,例如:

 //在调用findViewById之前必须通过inflate布局文件得到convertView
 //或者getView函数传递过来的convertView不为空
 Button btn=convertView.findViewById( btn id  );   // btn id 填入XML布局文件中的Button定义的ID
 btn.setOnClickListener(new View.OnClickListener(){
     @Override
        void onClick(View v){
            //这里写你的按钮点击之后要做的事
        }
 });

楼上回答正解,但要注意的是,在item中设置button 或者imagebutton,会存在抢取焦点的现象,需要在Item Layout 的根布局中加上 android:descendantFocusability = "blocksDescendants" 属性即可

可以用intent将xml文件传入按钮监听事件当中,形式如下

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
     @Override
     public void onItemClick(AdapterView<?> parent, View view,int position,long id){
        Intent intent = new Intent(this,yourActivity.class);
        startActivity(intent);
     }
 });

然后在yourActivity.java(yourActivity.java是你的item对应的.java文件)的onCreate中

public class yourActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yourXML);
        Intent intent = getIntent();
    }

}


lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // 你要进行的操作

        }
    });

public class MainActivity extends Activity implements OnItemClickListener{

private Context mContext;  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    mContext = this;  

    // 找到控件  
    ListView lv_news = (ListView)findViewById(R.id.lv_news);  

    // 获取新闻的内容,也就是list封装  
    ArrayList<NewsBean> allNews = NewsUtils.getAllNews(mContext);  

    // 创建一个adapter设置给listview  
    NewsAdapter newsAdapter = new NewsAdapter(mContext, allNews);  
    lv_news.setAdapter(newsAdapter);  

    // 设置listview条目的点击事件  
    lv_news.setOnItemClickListener(this);  

}  

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
    //需要获取条目上bean对象中url做跳转  
    NewsBean bean = (NewsBean) parent.getItemAtPosition(position);  

    String url = bean.newsurl;  

    //跳转浏览器  
    Intent intent = new Intent();  
    intent.setAction(Intent.ACTION_VIEW);  
    intent.setData(Uri.parse(url));  
    startActivity(intent);  

}  

}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android中用首字母排序的listview中的item的滑动监听与listview的上下滑动冲突
大神帮看看,我现在listview的item中我写了一个OnTouchListener,但是发现横向滑动的时候老是会触发listview的上下滑动事件,导致横向滑动很难滑出来,但是滑出来第一次后,后面就很容易划出来了!大神帮忙看看!!!感谢! 让人很是苦恼,这个该怎么处理呢?查过资料说改返回值为false,改了都滑不出来! ``` /** * 侧滑显示删除按钮 */ private View.OnTouchListener convertTouch = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int position = (Integer) v.getTag(); if (position != lastPosition) { notifyDataSetChanged(); lastPosition = position; } offsetX = operation.getWidth(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { x = event.getRawX(); } break; case MotionEvent.ACTION_UP: { ux = event.getRawX(); if ((x - ux) > 60) { v.setX(-offsetX); } else if (v.getX() == 0) { String name = list.get(position).getName(); String userid = list.get(position).getUserId(); Intent intent = new Intent(mActivity, AddressContactDetailsActivity.class); intent.putExtra("name", name); intent.putExtra("userId", userid); mActivity.startActivity(intent); } else { v.setX(0); } } break; case MotionEvent.ACTION_MOVE: { ux = event.getRawX(); if ((x - ux) > 60) { v.setX(-offsetX); } } break; } return true; } }; ```
listview每个item上的每个button的点击事件都触发了,适配器每次都找了最后一个textview
SimpleAdapter wadapter=new SimpleAdapter(getActivity(), (List<? extends Map<String, ?>>) mapList,R.layout. simplist, new String[]{"name","status","scene"},new int[]{R.id. name,R.id. statustext,R.id. cenery}){ @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null{ convertView=super.getView(position,convertView,parent); holder.button = (Button) convertView.findViewById(R.id. button) convertView.setTag(holder); } else { holder= (Viewholder) convertView.getTag(); } buttonevent();//按钮点击事件 return convertView; } }; 我是在创建simpleadapter时在里面复写了getview方法 然后,无论点击哪一条item上的控件按钮,每次只有最后一个item会被监听
Android中怎样用自定义的adapter加载日期列表
想实现以下的效果,因为自己技术大白,不知道怎么处理,贴出代码: 我是用ViewPager + Fragment实现页面切换的,其中在fragmentB中有个按钮button,fragmentA中有个listview,现在想实现的是,通过点击B中的button,在A中的listview中显示一个item,item的名字用当前时间来设置。我用的是自定义的adapter, ``` private class DateAdapter extends ArrayAdapter<Date_item> { private int resourceId; public DateAdapter(Context context, int dateresourceId, List<Date_item> objects){ super(context, dateresourceId,objects); resourceId = dateresourceId; } @Override public View getView(int position,View convertView, ViewGroup parent){ Date_item date_item = getItem(position);//获取当前项的date实例 View view; ViewHolder viewHolder; if(convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId,null); viewHolder = new ViewHolder(); viewHolder.date = (TextView)view.findViewById(R.id.chart_date); view.setTag(viewHolder);//将viewHolder缓存到view中 }else { view = convertView; viewHolder = (ViewHolder)view.getTag(); } return view; } class ViewHolder{ TextView date; } } ``` 我将A中列表的item也设置在了B中: ``` //列表item的时间形式 //设置时间格式 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd/HH:mm:ss"); //获取当前时间 long time = System.currentTimeMillis(); //将long转化为Date Date date = new Data(time); String timeSave = format.format(date); ``` 在B中的button的监听事件里面: ``` btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ DateAdapter dateAdapter =new DateAdapter(getActivity(),R.layout.item_layout,dateList); listView.setAdapter(dateAdapter); } }) ``` 程序一运行就闪退,错误是NullPointerException:Attempt to invoke virtual method'void android widget.ListView.setAdapter(android.widget.ListAdapter)'on a null object reference. 请问这是什么情况,这问题困了我很久了,在线等,感谢各位
android开发中,想实现点击ImageButton切换它的图片。
开发时使用adapter把数据更新到listview。每一个Item都有一个按钮,onClicka时, v.findViewById(R.id.button).setBackgroundDrawable( getResources().getDrawable(R.drawable.picB)); 。 关于切换图片遇到几个问题,望各位大神指点一二。 1.布置XML时,设置android:src="@drawable/picA",这种做法点击没有进行图片切换。 2.布置XML时,不设定背景图片,设置adapter时,holder.botton.setBackgroundDrawable(getResources().getDrawable(R.drawable.picA));这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,图片有变回了原来的图片。 3.布置XML时,不设定背景图片,设置adapter时,((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.picA)); 这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,变了图片的按钮不是我点击的那个按钮,数目也不对。按钮监听如下: holder.copyBotton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.findViewById(R.id.copybutton) .setBackgroundColor(00000000); v.findViewById(R.id.copybutton).setBackgroundDrawable( getResources().getDrawable(R.drawable.redheart)); } });
android 动态添加了button后,怎么给button设置监听器?
android 动态添加了button后,怎么给button设置监听器? 类似微信一样,我收到了语音消息,我在主界面上添加了一个按钮,这个按钮怎么添加监听器?点击后就可以播放我收到的那条消息。 我已经用listview动态添加item(是一个button)了,就是不知道每一个item怎么设置点击后播放不同的声音。。。 private void send() { if(flag==0)//发送的是文字 { sendContString = mEditTextContent.getText().toString(); if (sendContString.length() > 0) { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false); entity.setText(sendContString); entity.setKind(1); mDataArrays.add(entity); new Thread(new Runnable() { @Override public void run() { try { new Client().send(ip, port,sendContString,1,Aname,Bname); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } } else//发送的是语音 { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false);//表示是自己发的 entity.setText(pathWav);//录音后存放的声音的地址 entity.setKind(2);//种类是2表示是声音 mDataArrays.add(entity); } mAdapter.notifyDataSetChanged();//刷新 mEditTextContent.setText(""); mListView.setSelection(mListView.getCount() - 1);//指向最后一个 } /////////////////////分割线//////////////////////////// package com.myweixin; import android.R.integer; import android.content.Context; import android.database.DataSetObserver; import android.media.MediaPlayer; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.TextView; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private ChatMsgEntity entity; private LayoutInflater mInflater; private ViewHolder viewHolder = null; private String position1; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { ctx = context; this.coll = coll; mInflater = LayoutInflater.from(context); } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) { return IMsgViewType.IMVT_COM_MSG; }else{ return IMsgViewType.IMVT_TO_MSG; } } public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } public View getView(int position, View convertView, ViewGroup parent) { this.position1=position+""; entity = coll.get(position); boolean isComMsg = entity.getMsgType(); if (convertView == null) { if (isComMsg) { convertView = mInflater.inflate(R.layout.chatting_item_msg_text_left, null); }else{ convertView = mInflater.inflate(R.layout.chatting_item_msg_text_right, null); } viewHolder = new ViewHolder(); viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username); viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); viewHolder.isComMsg = isComMsg; //添加监听事件 // if(entity.getKind()==2) // { // // viewHolder.tvContent.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) {//设置监听器 // //play(viewHolder.tempTextView.getText().toString()); // // } // }); // } convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.getDate()); viewHolder.tvUserName.setText(entity.getName()); if(entity.getKind()==1) viewHolder.tvContent.setText(entity.getText()); else{ viewHolder.tvContent.setText("语音-点击播放"); viewHolder.tvContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {//设置监听器 Log.i("BBB", position1); } }); } return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public TextView tempTextView; public boolean isComMsg = true; } private void play(String url) { try { MediaPlayer mp = new MediaPlayer(); mp.reset(); mp.setDataSource(url); mp.prepare(); mp.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
android Adapter空指针问题 求大神看看 解决不了
是这样的。我是在做一个相当于一个手机卫士,里面有通讯录和黑名单两个功能。这个代码是我做的黑名单里的。![图片说明](https://img-ask.csdn.net/upload/201706/17/1497695379_112155.png) 想实现的功能是点黑名单按钮,可以出现这个黑名单的Activity。通讯录做了一个Listview,点通讯录按钮,可以导入系统通讯录,然后设置点击监听,长按item可以发短信,点击可以打电话。 现在的问题是,无论是通讯录还是黑名单,一点按钮就报错,报错的内容就是空指针。不知道怎么觉得。哭唧唧。 这个是代码。无论尝试什么方法,都报错空指针。 package com.jinwen.pengu.communication; import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class Stop extends Activity { private ListView iv_main; private BlackNumberAdapter adapter; private BlackNumberDao dao; private List<BlackNumber> data; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_main = (ListView) findViewById(R.id.iv_main); adapter = new BlackNumberAdapter(); dao = new BlackNumberDao(this); data = dao.getAll(); iv_main.setAdapter(adapter); } public void add(View v){ } class BlackNumberAdapter extends BaseAdapter{ @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView ==null){ convertView = View.inflate(Stop.this,android.R.layout.simple_list_item_1,null); } BlackNumber blackNumber = data.get(position); TextView textView = (TextView) convertView.findViewById(android.R.id.text1); textView.setText(blackNumber.getNumber()); return convertView; } } } 错误: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference at com.jinwen.pengu.communication.Stop.onCreate(Stop.java:31)
recycview中添加底部按钮问题。
我就想在这个recycview中底部添加两个按钮 项目地址链接: https://pan.baidu.com/s/13EzJZ8CrRL6xRiFjUxJXqw 提取码: qjet ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552547394_832120.png) ``` public class CollectFragment extends Fragment { public RecyclerView mCollectRecyclerView;//定义RecyclerView //定义以goodsentity实体类为对象的数据集合 private ArrayList<GoodsEntity> goodsEntityList = new ArrayList<GoodsEntity>(); //自定义recyclerveiw的适配器 private CollectRecycleAdapter mCollectRecyclerAdapter; private static ChangeFragment mChange; public static CollectFragment newInstance(ChangeFragment changeFragment) { mChange = changeFragment; Bundle args = new Bundle(); CollectFragment fragment = new CollectFragment(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取fragment的layout View view = inflater.inflate(R.layout.recyclerview, container, false); //对recycleview进行配置 return view; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initRecyclerView(view); //模拟数据 initData(); } /** * TODO 模拟数据 */ private void initData() { for (int i=0;i<10;i++){ GoodsEntity goodsEntity=new GoodsEntity(); goodsEntity.setGoodsName("模拟数据"+i); goodsEntity.setGoodsPrice("100"+i); goodsEntityList.add(goodsEntity); } } /** * TODO 对recycleview进行配置 */ private void initRecyclerView(View view) { //获取RecyclerView mCollectRecyclerView=view.findViewById(R.id.collect_recyclerView); //创建adapter mCollectRecyclerAdapter = new CollectRecycleAdapter(getActivity(), goodsEntityList); //给RecyclerView设置adapter mCollectRecyclerView.setAdapter(mCollectRecyclerAdapter); //设置layoutManager,可以设置显示效果,是线性布局、grid布局,还是瀑布流布局 //参数是:上下文、列表方向(横向还是纵向)、是否倒叙 mCollectRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); //设置item的分割线 mCollectRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //RecyclerView中没有item的监听事件,需要自己在适配器中写一个监听事件的接口。参数根据自定义 mCollectRecyclerAdapter.setOnItemClickListener(new CollectRecycleAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, GoodsEntity data) { //此处进行监听事件的业务处理 Toast.makeText(getActivity(),"我是item",Toast.LENGTH_SHORT).show(); mChange.changeAttractionsContent(); } }); } } ``` ``` public class CollectRecycleAdapter extends RecyclerView.Adapter<CollectRecycleAdapter.myViewHodler> { private Context context; private ArrayList<GoodsEntity> goodsEntityList; //创建构造函数 public CollectRecycleAdapter(Context context, ArrayList<GoodsEntity> goodsEntityList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.goodsEntityList = goodsEntityList;//实体类数据ArrayList } /** * 创建viewhodler,相当于listview中getview中的创建view和viewhodler * * @param parent * @param viewType * @return */ @Override public myViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { //创建自定义布局 View itemView = View.inflate(context, R.layout.item_content, null); return new myViewHodler(itemView); } /** * 绑定数据,数据与view绑定 * * @param holder * @param position */ @Override public void onBindViewHolder(myViewHodler holder, int position) { //根据点击位置绑定数据 GoodsEntity data = goodsEntityList.get(position); // holder.mItemGoodsImg; holder.mItemGoodsName.setText(data.goodsName);//获取实体类中的name字段并设置 holder.mItemGoodsPrice.setText(data.goodsPrice);//获取实体类中的price字段并设置 } /** * 得到总条数 * * @return */ @Override public int getItemCount() { return goodsEntityList.size(); } //自定义viewhodler class myViewHodler extends RecyclerView.ViewHolder { private ImageView mItemGoodsImg; private TextView mItemGoodsName; private TextView mItemGoodsPrice; public myViewHodler(View itemView) { super(itemView); mItemGoodsImg = itemView.findViewById(R.id.tx_news_simple_photos_01); mItemGoodsName = itemView.findViewById(R.id.tx_news_simple_photos_title); mItemGoodsPrice = itemView.findViewById(R.id.tx_news_simple_photos_time); //点击事件放在adapter中使用,也可以写个接口在activity中调用 //方法一:在adapter中设置点击事件 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可以选择直接在本位置直接写业务处理 //Toast.makeText(context,"点击了xxx",Toast.LENGTH_SHORT).show(); //此处回传点击监听事件 if(onItemClickListener!=null){ onItemClickListener.OnItemClick(v, goodsEntityList.get(getLayoutPosition())); } } }); } } /** * 设置item的监听事件的接口 */ public interface OnItemClickListener { /** * 接口中的点击每一项的实现方法,参数自己定义 * * @param view 点击的item的视图 * @param data 点击的item的数据 */ public void OnItemClick(View view, GoodsEntity data); } //需要外部访问,所以需要设置set方法,方便调用 private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } } ```
自学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; } } }; }
安卓Adapter空指针,一直解决不了
是这样的。我是在做一个相当于一个手机卫士,里面有通讯录和黑名单两个功能。这个代码是我做的黑名单里的。图片说明 想实现的功能是点黑名单按钮,可以出现这个黑名单的Activity。通讯录做了一个Listview,点通讯录按钮,可以导入系统通讯录,然后设置点击监听,长按item可以发短信,点击可以打电话。 现在的问题是,无论是通讯录还是黑名单,一点按钮就报错,报错的内容就是空指针。不知道怎么解决。哭唧唧。 ![图片说明](https://img-ask.csdn.net/upload/201706/18/1497753680_955031.png) 这个是代码。无论尝试什么方法,都报错空指针。 package com.jinwen.pengu.communication; import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class Stop extends Activity { private ListView iv_main; private BlackNumberAdapter adapter; private BlackNumberDao dao; private List data; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_main = (ListView) findViewById(R.id.iv_main); adapter = new BlackNumberAdapter(); dao = new BlackNumberDao(this); data = dao.getAll(); iv_main.setAdapter(adapter); } public void add(View v){ } class BlackNumberAdapter extends BaseAdapter{ @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView ==null){ convertView = View.inflate(Stop.this,android.R.layout.simple_list_item_1,null); } BlackNumber blackNumber = data.get(position); TextView textView = (TextView) convertView.findViewById(android.R.id.text1); textView.setText(blackNumber.getNumber()); return convertView; } } } 错误: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference at com.jinwen.pengu.communication.Stop.onCreate(Stop.java:31)
代码有错误,求大神帮忙指点迷津!!!!
public class ChatFragment extends BaseFragment implements OnClickListener,ReceiveMsgListener{ // private NetThreadHelper netThreadHelper; // private ImageView chat_item_head; //头像 private TextView chat_name; //名字及IP private TextView chat_mood; //组名 private Button chat_quit; //退出按钮 private ListView chat_list; //聊天列表 private EditText chat_input; //聊天输入框 private Button chat_send; //发送按钮 private List<ChatMessage> msgList; //用于显示的消息list private String receiverName; //要接收本activity所发送的消息的用户名字 private String receiverIp; //要接收本activity所发送的消息的用户IP private String receiverGroup; //要接收本activity所发送的消息的用户组名 private ChatListAdapter adapter; //ListView对应的adapter private String selfName; private String selfGroup; private final static int MENU_ITEM_SENDFILE = Menu.FIRST; //发送文件 private final static int MENU_ITEM_EXIT = Menu.FIRST + 1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View chatLayout = inflater.inflate(R.layout.chat, container, false); return chatLayout; // findViews(); // netThreadHelper = NetThreadHelper.newInstance(); msgList = new ArrayList<ChatMessage>(); Intent intent = getIntent(); Bundle bundle = intent.getExtras(); receiverName = bundle.getString("receiverName"); receiverIp = bundle.getString("receiverIp"); receiverGroup = bundle.getString("receiverGroup"); selfName = "android飞鸽"; selfGroup = "android"; chat_name.setText(receiverName + "(" + receiverIp + ")"); chat_mood.setText("组名:" + receiverGroup); chat_quit.setOnClickListener(this); chat_send.setOnClickListener(this); Iterator<ChatMessage> it = netThreadHelper.getReceiveMsgQueue().iterator(); while(it.hasNext()){ //循环消息队列,获取队列中与本聊天activity相关信息 ChatMessage temp = it.next(); //若消息队列中的发送者与本activity的消息接收者IP相同,则将这个消息拿出,添加到本activity要显示的消息list中 if(receiverIp.equals(temp.getSenderIp())){ msgList.add(temp); //添加到显示list it.remove(); //将本消息从消息队列中移除 } } adapter = new ChatListAdapter(getActivity(), msgList); chat_list.setAdapter(adapter); netThreadHelper.addReceiveMsgListener(this); //注册到listeners } public void onViewCreated(View view, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onViewCreated(view, savedInstanceState); chat_name = (TextView)view.findViewById(R.id.chat_name); chat_mood = (TextView) view.findViewById(R.id.chat_mood); chat_quit = (Button) view.findViewById(R.id.chat_quit); chat_list = (ListView) view.findViewById(R.id.chat_list); chat_input = (EditText) view.findViewById(R.id.chat_input); chat_send = (Button) view.findViewById(R.id.chat_send); } @Override public void processMessage(Message msg) { // TODO Auto-generated method stub switch(msg.what){ case IpMessageConst.IPMSG_SENDMSG: adapter.notifyDataSetChanged(); //刷新ListView break; case IpMessageConst.IPMSG_RELEASEFILES:{ //拒绝接受文件,停止发送文件线程 if(NetTcpFileSendThread.server != null){ try { NetTcpFileSendThread.server.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } break; case UsedConst.FILESENDSUCCESS:{ //文件发送成功 makeTextShort("文件发送成功"); } break; } //end of switch } @Override public boolean receive(ChatMessage msg) { // TODO Auto-generated method stub if(receiverIp.equals(msg.getSenderIp())){ //若消息与本activity有关,则接收 msgList.add(msg); //将此消息添加到显示list中 sendEmptyMessage(IpMessageConst.IPMSG_SENDMSG); //使用handle通知,来更新UI BaseFragment.playMsg(); return true; } return false; } @Override public void finish() { // TODO Auto-generated method stub //一定要移除,不然信息接收会出现问题 netThreadHelper.removeReceiveMsgListener(this); super.finish(); } @Override public void onClick(View v) { // TODO Auto-generated method stub if(v == chat_send){ sendAndAddMessage(); }else if(v == chat_quit){ finish(); } } /** * 发送消息并将该消息添加到UI显示 */ private void sendAndAddMessage(){ String msgStr = chat_input.getText().toString().trim(); if(!"".equals(msgStr)){ //发送消息 IpMessageProtocol sendMsg = new IpMessageProtocol(); sendMsg.setVersion(String.valueOf(IpMessageConst.VERSION)); sendMsg.setSenderName(selfName); sendMsg.setSenderHost(selfGroup); sendMsg.setCommandNo(IpMessageConst.IPMSG_SENDMSG); sendMsg.setAdditionalSection(msgStr); InetAddress sendto = null; try { sendto = InetAddress.getByName(receiverIp); } catch (UnknownHostException e) { // TODO Auto-generated catch block Log.e("MyFeiGeChatActivity", "发送地址有误"); } if(sendto != null) netThreadHelper.sendUdpData(sendMsg.getProtocolString() + "\0", sendto, IpMessageConst.PORT); //添加消息到显示list ChatMessage selfMsg = new ChatMessage("localhost", selfName, msgStr, new Date()); selfMsg.setSelfMsg(true); //设置为自身消息 msgList.add(selfMsg); }else{ makeTextShort("不能发送空内容"); } chat_input.setText(""); adapter.notifyDataSetChanged();//更新UI } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub super.onCreateOptionsMenu(menu); menu.add(0, MENU_ITEM_SENDFILE, 0, "发送文件"); menu.add(0, MENU_ITEM_EXIT, 0, "退出"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case MENU_ITEM_SENDFILE: Intent intent = new Intent(getActivity(), FileFragment.class); startActivityForResult(intent, 0); break; case MENU_ITEM_EXIT: finish(); break; } return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK){ //得到发送文件的路径 Bundle bundle = data.getExtras(); String filePaths = bundle.getString("filePaths"); //附加文件信息串,多个文件使用"\0"进行分隔 // Toast.makeText(this, filePaths, Toast.LENGTH_SHORT).show(); String[] filePathArray = filePaths.split("\0"); //发送传送文件UDP数据报 IpMessageProtocol sendPro = new IpMessageProtocol(); sendPro.setVersion("" +IpMessageConst.VERSION); sendPro.setCommandNo(IpMessageConst.IPMSG_SENDMSG | IpMessageConst.IPMSG_FILEATTACHOPT); sendPro.setSenderName(selfName); sendPro.setSenderHost(selfGroup); String msgStr = ""; //发送的消息 StringBuffer additionInfoSb = new StringBuffer(); //用于组合附加文件格式的sb for(String path:filePathArray){ File file = new File(path); additionInfoSb.append("0:"); additionInfoSb.append(file.getName() + ":"); additionInfoSb.append(Long.toHexString(file.length()) + ":"); //文件大小十六进制表示 additionInfoSb.append(Long.toHexString(file.lastModified()) + ":"); //文件创建时间,现在暂时已最后修改时间替代 additionInfoSb.append(IpMessageConst.IPMSG_FILE_REGULAR + ":"); byte[] bt = {0x07}; //用于分隔多个发送文件的字符 String splitStr = new String(bt); additionInfoSb.append(splitStr); } sendPro.setAdditionalSection(msgStr + "\0" + additionInfoSb.toString() + "\0"); InetAddress sendto = null; try { sendto = InetAddress.getByName(receiverIp); } catch (UnknownHostException e) { // TODO Auto-generated catch block Log.e("MyFeiGeChatActivity", "发送地址有误"); } if(sendto != null) netThreadHelper.sendUdpData(sendPro.getProtocolString(), sendto, IpMessageConst.PORT); //监听2425端口,准备接受TCP连接请求 Thread netTcpFileSendThread = new Thread(new NetTcpFileSendThread(filePathArray)); netTcpFileSendThread.start(); //启动线程 } } } ![![![图片说明](https://img-ask.csdn.net/upload/201605/12/1463064059_713861.png)图片说明](https://img-ask.csdn.net/upload/201605/12/1463063989_240367.png)图片说明](https://img-ask.csdn.net/upload/201605/12/1463063930_306003.png) 求大神指点
android 百度地图 搜索跳转
一共有两个Activity ,第一个Activity显示地图,实现定位当前地址并输出在第一个页面的EditText里,第二个Activity是搜索页面,搜索框是EditText,ListView显示搜索结果,使用百度地图建议搜索功能。比如搜索一个万达广场,点击搜索结果后希望在第一个Activity的地图上显示当前定位地址和到万达广场的路线规划,就是起点和终点显示出来。 (这里需要起点自动获取,因为地图已经实现自动定位当前地址了,不要那种既要输入起点,又要输入终点,最后还得要点击一下确定,才会显示结果的那种无语的操作体验,整个软件是没有一个Bundle按钮的,只需要item) 现在的问题是点击第二个页面ListView里面的搜索结果万达广场,跳转到第一个页面之后没有任何反应。 谢谢各位大神哥哥姐姐~请帮我实现Intent ,使用的是startactivityforresult,数据传送和接收,在接收后的onActivityResult里面进行处理 第一个页面 public class MainActivity extends Activity { private MapView mMapView = null; private BaiduMap mBaidumap =null; private PoiSearch mPoiSearch = null; private EditText mTv = null; private LocationClient mLocClient; private MainActivity.MyLocationListener myListener = new MainActivity.MyLocationListener(); private int mCurrentDirection = 0; private Double lastX = 0.0; private MyLocationData locData; private float mCurrentAccracy; private double mCurrentLat = 0.0; private double mCurrentLon = 0.0; private String mCityName; boolean isFirstLoc = true; BitmapDescriptor mCurrentMarker; private SensorManager mSensorManager; private MyLocationConfiguration.LocationMode mCurrentMode; private MainActivity.DirectionSensorListener DirectionListener = new MainActivity.DirectionSensorListener(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.content_main); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);//获取传感器管理服务 mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL; //初始化地图 mMapView = (MapView) findViewById(R.id.mapView); mTv = (EditText) findViewById(R.id.tiaozhuan); mTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString("userName", "zhangsan"); bundle.putInt("userAge", 100); Intent intent = new Intent(MainActivity.this, Main2Activity.class); intent.putExtras(bundle); startActivityForResult(intent, 1);// } }); /*protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub switch (requestCode){ case RESULT_OK: Bundle bundle=data.getExtras(); String str=bundle.getString("backData"); Toast.makeText(MainActivity.this, str,Toast.LENGTH_LONG).show(); break; default: break; }*/ mBaidumap = mMapView.getMap(); mMapView.showScaleControl(false); mMapView.showZoomControls(false); UiSettings settings = mBaidumap.getUiSettings(); settings.setOverlookingGesturesEnabled(false);//设置双指下拉时不启用3D地图 settings.setRotateGesturesEnabled(false);//设置地图不可旋转 //开启定位图层 mBaidumap.setMyLocationEnabled(true); initLocation(); //initPoiSearch(); mPoiSearch = PoiSearch.newInstance(); mPoiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() { @Override public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { if (poiDetailResult == null || poiDetailResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG) .show(); return; } if (poiDetailResult.error == SearchResult.ERRORNO.NO_ERROR) { //搜索到POI mBaidumap.clear(); mBaidumap.addOverlay(new MarkerOptions() .position(poiDetailResult.location) .icon(BitmapDescriptorFactory.fromResource(R.drawable.alf)) .title(poiDetailResult.getAddress())); //讲该POI设置为地图中心 mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(poiDetailResult.location)); Toast.makeText(MainActivity.this, "搜索中...", Toast.LENGTH_LONG).show(); return; } } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { } @Override public void onGetPoiResult(PoiResult poiResult) { } }); } private void initLocation() { mLocClient = new LocationClient(this); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);//打开GPS option.setCoorType("bd09ll");//设置坐标类型 option.setIsNeedAddress(true);//是否需要地址信息 option.setScanSpan(1000); LocationPermission(); mLocClient.setLocOption(option); } private void LocationPermission() { int checkPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION); if (checkPermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); Log.d("未获得定位权限", "弹出提示"); return; } } public class DirectionSensorListener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) { double x = event.values[SensorManager.DATA_X]; if (Math.abs(x - lastX) > 1.0) { mCurrentDirection = (int) x; //设置定位数据 locData = new MyLocationData.Builder() .accuracy(mCurrentAccracy)//精度 .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360 .latitude(mCurrentLat)//经度 .longitude(mCurrentLon)//纬度 .build(); mBaidumap.setMyLocationData(locData); } lastX = x; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { //map view销毁后不在处理新接受的位置 if (bdLocation == null || mMapView == null) { return; } mCurrentLat = bdLocation.getLatitude(); mCurrentLon = bdLocation.getLongitude(); mCurrentAccracy = bdLocation.getRadius(); mCityName = bdLocation.getCity(); //设置定位数据 locData = new MyLocationData.Builder() .accuracy(bdLocation.getRadius())//精度 .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360 .latitude(bdLocation.getLatitude())//经度 .longitude(bdLocation.getLongitude())//纬度 .build(); mBaidumap.setMyLocationData(locData); //第一次定位时,将地图位置移动到当前位置 if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaidumap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); mCurrentMarker = null; mBaidumap .setMyLocationConfiguration(new MyLocationConfiguration( mCurrentMode, true, null)); } } } @Override protected void onStart() { //为系统的方向传感器注册监听器 mSensorManager.registerListener(DirectionListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION) , SensorManager.SENSOR_DELAY_UI); //启动监听 mLocClient.start(); super.onStart(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onStop() { //取消传感器监听 mSensorManager.unregisterListener(DirectionListener); super.onStop(); } @Override protected void onDestroy() { //退出时销毁定位 mLocClient.stop(); //关闭定位图层 mBaidumap.setMyLocationEnabled(false); mMapView.onDestroy(); //mMapView = null; // mPoiSearch.destroy(); //mSuggestionSearch.destroy(); super.onDestroy(); } } 第二个页面 public class Main2Activity extends Activity implements OnGetSuggestionResultListener { private EditText et_address; private Adapter_list_Address adapter_list_Address; private ListView myListView; private List<String> list = new ArrayList<>(); private List<String> lists = new ArrayList<>(); //地图相关 /** * 百度地图控件 */ MapView mMapView = null; /** * 百度地图实例 */ BaiduMap mBaidumap = null; //定位相关 /** * 定位客户端 */ LocationClient mLocClient; /** * 定位模式 */ private LocationMode mCurrentMode; /** * 定位图标 */ BitmapDescriptor mCurrentMarker; /** * 传感器管理器 */ private SensorManager mSensorManager; /** * 当前方向 */ private int mCurrentDirection = 0; /** * 当前经度 */ private double mCurrentLat = 0.0; /** * 当前纬度 */ private double mCurrentLon = 0.0; /** * 当前经度 */ private float mCurrentAccracy; /** * 是否首次定位 */ boolean isFirstLoc = true; /** * 定位数据 */ private MyLocationData locData; /** * 定位监听 */ private MyLocationListener myListener = new MyLocationListener(); /** * 方向监听 */ private DirectionSensorListener DirectionListener = new DirectionSensorListener(); /** * 上一次的方向 */ private Double lastX = 0.0; /** * 定位所在城市 */ private String mCityName; //poi搜索相关 /** * Poi检索实例 */ private PoiSearch mPoiSearch = null; private SuggestionSearch mSuggestionSearch = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main2); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);//获取传感器管理服务 mCurrentMode = LocationMode.NORMAL; //初始化地图 mMapView = (MapView) findViewById(R.id.mapView2); mBaidumap = mMapView.getMap(); mMapView.showScaleControl(false); mMapView.showZoomControls(false); UiSettings settings = mBaidumap.getUiSettings(); settings.setOverlookingGesturesEnabled(false);//设置双指下拉时不启用3D地图 settings.setRotateGesturesEnabled(false);//设置地图不可旋转 //开启定位图层 mBaidumap.setMyLocationEnabled(true); initLocation(); initPoiSearch(); initData(); Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { ShowKeyboard(et_address); } }, 500); } private void initData() { et_address = (EditText) findViewById(R.id.et_address); myListView = (ListView) findViewById(R.id.lv_address); mPoiSearch = PoiSearch.newInstance(); mPoiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() { @Override public void onGetPoiResult(PoiResult poiResult) { if (poiResult == null || poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { Toast.makeText(Main2Activity.this, "未找到结果", Toast.LENGTH_LONG).show(); return; } if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) { } if (poiResult.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) { //当输入关键字在本市没有找到,但是在其他城市找到时,返回包含该关键字信息的城市列表 String strInfo = "在"; for (CityInfo cityInfo : poiResult.getSuggestCityList()) { strInfo += cityInfo.city; strInfo += ","; } strInfo += "找到结果"; Toast.makeText(Main2Activity.this, strInfo, Toast.LENGTH_LONG).show(); } } @Override public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { if (poiDetailResult == null || poiDetailResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { Toast.makeText(Main2Activity.this, "未找到结果", Toast.LENGTH_LONG) .show(); return; } if (poiDetailResult.error == SearchResult.ERRORNO.NO_ERROR) { //搜索到POI mBaidumap.clear(); mBaidumap.addOverlay(new MarkerOptions() .position(poiDetailResult.location) .icon(BitmapDescriptorFactory.fromResource(R.drawable.alf)) .title(poiDetailResult.getAddress())); //讲该POI设置为地图中心 mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(poiDetailResult.location)); Toast.makeText(Main2Activity.this, "搜索中...", Toast.LENGTH_LONG).show(); return; } } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { } }); //初始化建议搜索模块,注册建议搜索事件监听 mSuggestionSearch = SuggestionSearch.newInstance(); mSuggestionSearch.setOnGetSuggestionResultListener(this); et_address.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable arg0) { if (adapter_list_Address != null) { adapter_list_Address.notifyDataSetChanged(); } mSuggestionSearch .requestSuggestion((new SuggestionSearchOption()) .keyword(et_address.getText().toString()).city("北京")); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { if (adapter_list_Address != null) { adapter_list_Address.notifyDataSetChanged(); } mSuggestionSearch .requestSuggestion((new SuggestionSearchOption()) .keyword(et_address.getText().toString()).city("北京")); } @Override public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { if (cs.length() < 0) { return; } /** * 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新 */ if (adapter_list_Address != null) { adapter_list_Address.notifyDataSetChanged(); } mSuggestionSearch .requestSuggestion((new SuggestionSearchOption()) .keyword(et_address.getText().toString()).city("北京")); } }); } @Override public void onGetSuggestionResult(final SuggestionResult msg) { // TODO Auto-generated method stub if (msg == null || msg.getAllSuggestions() == null) { Toast.makeText(Main2Activity.this, "未检索到当前地址", Toast.LENGTH_SHORT).show(); return; } if (list != null) { list.clear(); } if (lists != null) { lists.clear(); } for (SuggestionResult.SuggestionInfo info : msg.getAllSuggestions()) { Log.e("info.ccity", "info.city" + info.city + "info.district" + info.district + "info.key" + info.key); list.add(info.key); lists.add(info.city + info.district + info.key); adapter_list_Address = new Adapter_list_Address(Main2Activity.this, list, lists); myListView.setAdapter(adapter_list_Address); myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { SuggestionResult.SuggestionInfo info = msg.getAllSuggestions().get(position); mPoiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(info.uid)); Intent intentAddress = new Intent(); intentAddress.putExtra("backData",et_address.getText().toString()); setResult(RESULT_OK,intentAddress); finish(); } }); adapter_list_Address.notifyDataSetChanged(); } } public static void ShowKeyboard(View v) { InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, InputMethodManager.SHOW_FORCED); } public static void HideKeyboard(View v) { InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); } } /** * 初始化定位相关 */ private void initLocation() { mLocClient = new LocationClient(this); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);//打开GPS option.setCoorType("bd09ll");//设置坐标类型 option.setIsNeedAddress(true);//是否需要地址信息 option.setScanSpan(1000); LocationPermission(); mLocClient.setLocOption(option); } /** * poi搜索相关 */ private void initPoiSearch() { //初始化搜索模块,注册搜索事件监听 mPoiSearch = PoiSearch.newInstance(); //mPoiSearch.setOnGetPoiSearchResultListener(this); } /** * 获取GPS定位权限(Android6.0 以上需要动态获取权限) */ private void LocationPermission() { int checkPermission = ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.ACCESS_COARSE_LOCATION); if (checkPermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); Log.d("未获得定位权限", "弹出提示"); return; } } /** * 方向监听 */ public class DirectionSensorListener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) { double x = event.values[SensorManager.DATA_X]; if (Math.abs(x - lastX) > 1.0) { mCurrentDirection = (int) x; //设置定位数据 locData = new MyLocationData.Builder() .accuracy(mCurrentAccracy)//精度 .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360 .latitude(mCurrentLat)//经度 .longitude(mCurrentLon)//纬度 .build(); mBaidumap.setMyLocationData(locData); } lastX = x; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } /** * 定位监听 */ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { //map view销毁后不在处理新接受的位置 if (bdLocation == null || mMapView == null) { return; } mCurrentLat = bdLocation.getLatitude(); mCurrentLon = bdLocation.getLongitude(); mCurrentAccracy = bdLocation.getRadius(); mCityName = bdLocation.getCity(); //设置定位数据 locData = new MyLocationData.Builder() .accuracy(bdLocation.getRadius())//精度 .direction(mCurrentDirection) //此处设置开发者获取到的方向信息,顺时针0-360 .latitude(bdLocation.getLatitude())//经度 .longitude(bdLocation.getLongitude())//纬度 .build(); mBaidumap.setMyLocationData(locData); //第一次定位时,将地图位置移动到当前位置 if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaidumap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); mCurrentMarker = null; mBaidumap .setMyLocationConfiguration(new MyLocationConfiguration( mCurrentMode, true, null)); } } } @Override protected void onStart() { //为系统的方向传感器注册监听器 mSensorManager.registerListener(DirectionListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION) , SensorManager.SENSOR_DELAY_UI); //启动监听 mLocClient.start(); super.onStart(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onStop() { //取消传感器监听 mSensorManager.unregisterListener(DirectionListener); super.onStop(); } @Override protected void onDestroy() { //退出时销毁定位 mLocClient.stop(); //关闭定位图层 mBaidumap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; mPoiSearch.destroy(); mSuggestionSearch.destroy(); super.onDestroy(); } }
关于安卓页面跳转的问题
做了两个页面与页面跳转按钮,二页面想使用ListActivity,但是继承了ListActivity类后闪退 继承Activity时运行正常,但不能看到List效果,请大神帮忙看下代码,感谢 DEBUG 线程 [main](已暂挂(异常 RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 3254 ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 3350 ActivityThread.access$1100(ActivityThread, ActivityThread$ActivityClientRecord, Intent) 行: 223 ActivityThread$H.handleMessage(Message) 行: 1794 ActivityThread$H(Handler).dispatchMessage(Message) 行: 102 Looper.loop() 行: 148 ActivityThread.main(String[]) 行: 7224 Method.invoke(Object, Object...) 行: 不可用 [本机方法] ZygoteInit$MethodAndArgsCaller.run() 行: 1230 ZygoteInit.main(String[]) 行: 1120 报错日志 04-11 10:03:01.957: E/MotionRecognitionManager(30956): mSContextService = android.hardware.scontext.ISContextService$Stub$Proxy@b530bca 04-11 10:03:01.967: E/MotionRecognitionManager(30956): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@82fc13b 04-11 10:03:01.967: E/MotionRecognitionManager(30956): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@82fc13b 04-11 10:03:01.967: D/AndroidRuntime(30956): Shutting down VM 04-11 10:03:01.967: E/AndroidRuntime(30956): FATAL EXCEPTION: main 04-11 10:03:01.967: E/AndroidRuntime(30956): Process: com.example.audiorecord, PID: 30956 04-11 10:03:01.967: E/AndroidRuntime(30956): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.audiorecord/com.example.audiorecord.Activity02}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread.access$1100(ActivityThread.java:223) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.os.Handler.dispatchMessage(Handler.java:102) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.os.Looper.loop(Looper.java:148) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread.main(ActivityThread.java:7224) 04-11 10:03:01.967: E/AndroidRuntime(30956): at java.lang.reflect.Method.invoke(Native Method) 04-11 10:03:01.967: E/AndroidRuntime(30956): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 04-11 10:03:01.967: E/AndroidRuntime(30956): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 04-11 10:03:01.967: E/AndroidRuntime(30956): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ListActivity.onContentChanged(ListActivity.java:243) 04-11 10:03:01.967: E/AndroidRuntime(30956): at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:479) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.Activity.setContentView(Activity.java:2388) 04-11 10:03:01.967: E/AndroidRuntime(30956): at com.example.audiorecord.Activity02.onCreate(Activity02.java:38) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.Activity.performCreate(Activity.java:6877) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136) 04-11 10:03:01.967: E/AndroidRuntime(30956): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 04-11 10:03:01.967: E/AndroidRuntime(30956): ... 9 more Activity1: package com.example.audiorecord; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.content.Intent; public class RecordActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); super.onCreate(savedInstanceState); /* 设置显示main.xml布局*/ setContentView(R.layout.main); /* findViewById(R.id.button1)取得布局main.xml中的button1 */ Button button = (Button) findViewById(R.id.button1); /* 监听button的事件信息*/ button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /* 新建一个Intent对象*/ Intent intent = new Intent(); /* 指定intent要启动的类*/ intent.setClass(RecordActivity.this, Activity02.class); /* 启动一个新的Activity */ startActivity(intent); /* 关闭当前的Activity */ RecordActivity.this.finish(); } }); } } Activity2 package com.example.audiorecord; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class Activity02 extends ListActivity{ //声明 private List<String> items = null;//存放名称 private List<String> paths = null;//存放路径 private String rootPath = "/"; private TextView tv; private Button Back; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 设置显示main2布局*/ setContentView(R.layout.main2); /* findViewById(R.id.button2)取得布局main.xml中的button2 */ /* 监听button的事件信息*/ tv = (TextView) this.findViewById(R.id.TextView); this.getFileDir(rootPath);//获取rootPath目录下的文件. Back = (Button) findViewById(R.id.back); Back.setOnClickListener(new BackListener()); } class BackListener implements OnClickListener { public void onClick(View v) { Intent intent = new Intent(); /* 指定intent要启动的类*/ intent.setClass(Activity02.this, RecordActivity.class); /* 启动一个新的Activity */ startActivity(intent); /* 关闭当前的Activity */ Activity02.this.finish(); } } public void getFileDir(String filePath) { try{ this.tv.setText("当前路径:"+filePath);// 设置当前所在路径 items = new ArrayList<String>(); paths = new ArrayList<String>(); File f = new File(filePath); File[] files = f.listFiles();// 列出所有文件 // 如果不是根目录,则列出返回根目录和上一目录选项 if (!filePath.equals(rootPath)) { items.add("返回根目录"); paths.add(rootPath); items.add("返回上一层目录"); paths.add(f.getParent()); } // 将所有文件存入list中 if(files != null){ int count = files.length;// 文件个数 for (int i = 0; i < count; i++) { File file = files[i]; items.add(file.getName()); paths.add(file.getPath()); } } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); this.setListAdapter(adapter); }catch(Exception ex){ ex.printStackTrace(); } } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); String path = paths.get(position); File file = new File(path); //如果是文件夹就继续分解 if(file.isDirectory()){ this.getFileDir(path); }else{ new AlertDialog.Builder(this).setTitle("提示").setMessage(file.getName()+" 是一个文件!").setPositiveButton("OK", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { } }).show(); } }} MANIFEST <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.audiorecord" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".RecordActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity02"></activity> </application> </manifest>
Android中重写SimpleAdapter类引用后报空指针异常
直接粘代码吧 - - 重写的SimpleAdapter类: ``` public class MySimpleAdapter extends BaseAdapter { private LayoutInflater mInflater; private ArrayList<HashMap<String, Object>> list; private int layoutID; private String flag[]; private int ItemIDs[]; public MySimpleAdapter(Context context, ArrayList<HashMap<String, Object>> list, int layoutID, String flag[], int ItemIDs[]) { this.mInflater = LayoutInflater.from(context); this.list = list; this.layoutID = layoutID; this.flag = flag; this.ItemIDs = ItemIDs; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return 0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = mInflater.inflate(layoutID, null); convertView = mInflater.inflate(layoutID, null); for (int i = 0; i < flag.length; i++) { if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) { ImageView iv = (ImageView) convertView.findViewById(ItemIDs[i]); iv.setBackgroundResource((Integer) list.get(position).get( flag[i])); } else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) { TextView tv = (TextView) convertView.findViewById(ItemIDs[i]); tv.setText((String) list.get(position).get(flag[i])); } } addListener(convertView); return convertView; } public void addListener(View convertView) { ((TextView)convertView.findViewById(R.id.order_mine_show_handle_confirm)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(OrderMineNonPaymentActivity.onp) .setTitle("自定义通用SimpleAdapter") .setMessage("按钮成功触发监听事件!") .show(); } }); } } ``` 引用的地方 OrderMineNonPaymentActivity: ``` /** * 动态生成订单列表 lipeng */ private void addNonPaymentList() { order_mine_show_non_payment_list_ll = (LinearLayout) findViewById(R.id.order_mine_show_non_payment_list_ll); nonPaymentList = (ListView) findViewById(R.id.order_mine_show_non_payment_list); nonPaymentList.setDivider(null); nonPaymentSimpleAdapter = new SimpleAdapter( OrderMineNonPaymentActivity.this, goodsList, R.layout.activity_order_non_payment_item, new String[] { "shopname", "bigimage", "goodname" }, new int[] { R.id.order_mine_show_shopname, R.id.order_mine_show_goods_img, R.id.order_mine_show_goods_name }); MySimpleAdapter nonPaymentSimpleAdapter = new MySimpleAdapter(this, goodsList, R.layout.activity_order_mine_non_payment, new String[] { "shopname", "bigimage", "goodname" }, new int[] { R.id.order_mine_show_shopname, R.id.order_mine_show_goods_img, R.id.order_mine_show_goods_name }); nonPaymentList.setAdapter(nonPaymentSimpleAdapter); } private class MyOnItemClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } } ``` 异常报的空指针,找了半天也没找到为啥空指针了 ``` 06-17 22:55:32.845: E/AndroidRuntime(1463): FATAL EXCEPTION: main 06-17 22:55:32.845: E/AndroidRuntime(1463): Process: com.zb.stlala, PID: 1463 06-17 22:55:32.845: E/AndroidRuntime(1463): java.lang.NullPointerException 06-17 22:55:32.845: E/AndroidRuntime(1463): at com.zb.stlala.adapter.MySimpleAdapter.addListener(MySimpleAdapter.java:83) 06-17 22:55:32.845: E/AndroidRuntime(1463): at com.zb.stlala.adapter.MySimpleAdapter.getView(MySimpleAdapter.java:75) ```
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个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的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。 但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。 于...
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
2020金三银四,一篇文章教你如何征服面试官,拿到offer
2020年,跳槽面试就靠它们了,现在每天刷题,看源码文档,最近看的这些题目还是有些难度,有一部分我都要好好想一想才能回答出来,或者回答不出来,总的来说知识宽度够了深度还跟不上。所以要重点突破下底层的东西。这篇文章我总结了很久,希望对正在准备面试的同仁们有点帮助。没错我就是传说中的面霸!! 一. 面试准备 首先,是笔试题,这点是初级程序员绕不过去的坎。 笔试题一般的公司都会出的,除非你是大牛,可以选...
用Python开发实用程序 – 计算器
作者:隋顺意 一段时间前,自己制作了一个库 “sui-math”。这其实是math的翻版。做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于计算器,很多复杂的计算都离不开它。我们使用过各式各样的计算器,无论是电脑自带的,还是网也上的计算器,却都没有自己动手编写属于自己计算器。今天就让我们走进计算器的世界,用python来编写...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问