android开发中listview添加图片

map1.put("image",R.drawable.jiantou);
我在listview中添加图像时,引用图像的地址,如上所示,但提示错误The method put(String, String) in the type HashMap is not applicable for the
arguments (String, int)
但我看别人的代码都可以直接引用图像地址的,请大神帮忙解决一下,谢啦!!

1个回答

Map<String,Object> map =new HashMap<String,Object>();

你定义的map的第二个参数应该改成Object,你现在的应该是String

u011320108
allenzhenglu 谢啦,解决了
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android开发 向listview列表中动态添加(数据结构不同的)item
请问这种效果怎么做到呢????
Android开发listView中的Button点击事件被拦截
根据<http://blog.csdn.net/boylinux/article/details/8860443> 这位大神的帖子,我的代码如下,现在的问题是Listview中的Button和imageview和textview控件点击之后不会响应,而在滑动一下Listview后,之前的点击事件才会响应,导致这个问题的原因不明,但是如果不用HashMap<Integer,View>这个MAP的话,就不会有这个问题,请问大神们这是为什么呢?代码如下: public class MyTwoAdapter extends BaseAdapter { Context context; private List<FollowInfo> data; FollowInfo followInfo; Bitmap bitmap; FinalBitmap finalBitmap; HashMap<Integer,View> lmap = new HashMap<Integer,View>(); private LayoutInflater mInflater=null; public void setData(List<FollowInfo> data) { this.data = data; } public MyTwoAdapter(Context context) { this.context = context; mInflater = LayoutInflater.from(context); finalBitmap = FinalBitmap.create(context);//初始化FinalBitmap模块 finalBitmap.configLoadingImage(R.drawable.ic_launcher); } @Override public int getCount() { return data.size(); } @Override public FollowInfo getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @SuppressLint("NewApi") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (lmap.get(position)==null) { // if (convertView == null) { convertView = mInflater.inflate(R.layout.mytwo_item, null); viewHolder = new ViewHolder(); viewHolder.user_logo = (ImageView) convertView.findViewById(R.id.user_logo); viewHolder.user_name = (TextView) convertView.findViewById(R.id.user_name); viewHolder.add_time = (TextView) convertView.findViewById(R.id.add_time); viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv); viewHolder.sign1 = (TextView) convertView.findViewById(R.id.sign1); viewHolder.sign2 = (TextView) convertView.findViewById(R.id.sign2); viewHolder.sign3 = (TextView) convertView.findViewById(R.id.sign3); viewHolder.up = (Button) convertView.findViewById(R.id.yes_up); viewHolder.no_up = (Button) convertView.findViewById(R.id.no_up); viewHolder.up_num = (TextView) convertView.findViewById(R.id.up_num); viewHolder.say_sth = (ImageButton) convertView.findViewById(R.id.say_sth); viewHolder.share = (ImageButton) convertView.findViewById(R.id.share); viewHolder.fl = (FrameLayout) convertView.findViewById(R.id.fl); viewHolder.describe = (TextView) convertView.findViewById(R.id.describe); viewHolder.iv.setOnClickListener(clickListener); lmap.put(position, convertView); convertView.setTag(viewHolder); followInfo = data.get(position); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewHolder.fl.getLayoutParams(); layoutParams.width = AndroidUtil.SCREEN_WIDTH; //图片宽度填满屏幕 layoutParams.height = (int) (AndroidUtil.SCREEN_WIDTH * 1.5); viewHolder.fl.setLayoutParams(layoutParams); viewHolder.user_logo.setImageResource(R.drawable.ic_launcher); viewHolder.iv.setImageResource(R.drawable.ic_launcher); viewHolder.user_name.setText(followInfo.getUser_name()); viewHolder.up_num.setText(followInfo.getHot() + ""); viewHolder.add_time.setText(UpdateTime.getUpdateDate(new Date().getTime(), followInfo.getUpload_date(), context)); if (!followInfo.getDescribe().equals("")){ viewHolder.describe.setVisibility(0); viewHolder.describe.setText(followInfo.getDescribe()); } if (followInfo.getLikeStatus() == 1){ viewHolder.up.setVisibility(View.VISIBLE); viewHolder.no_up.setVisibility(View.INVISIBLE); } else { viewHolder.up.setVisibility(View.INVISIBLE); viewHolder.no_up.setVisibility(View.VISIBLE); } if (!followInfo.getCountry3().equals("")){ viewHolder.sign1.setVisibility(View.VISIBLE); viewHolder.sign1.setText("#" + followInfo.getCountry3() + " "); } if (!followInfo.getFashion().equals("")){ viewHolder.sign2.setVisibility(View.VISIBLE); viewHolder.sign2.setText("#" + followInfo.getFashion() + " "); } if (!followInfo.getScene().equals("")){ viewHolder.sign3.setVisibility(View.VISIBLE); viewHolder.sign3.setText("#" + followInfo.getScene() + " "); } //图片设置 final String user_image = followInfo.getImage_id(); finalBitmap.display(viewHolder.iv,AndroidUtil.SERVER_PATH+ //finalBitmap加载图片 "imageLoad/load_image_buff/"+ user_image +"/00/0"); //头像设置图片 final String user_logoUrl = followInfo.getUser_id(); finalBitmap.display(viewHolder.user_logo,AndroidUtil.SERVER_PATH +"imageLoad/load_user_image_buff/" + user_logoUrl); if (followInfo.getTags() != null && followInfo.getTags().size() != 0){ //动态添加标签 for (int i = 0; i < followInfo.getTags().size(); i++){ //TAG数 float tranX; float tranY; View tag_layout; final Tags tag = followInfo.getTags().get(i); if (tag.getPercentX() == null || tag.getPercentX().equals("") || tag.getPercentX().equals("null")){ tranX = Float.parseFloat(tag.getTagX()) / 480 * layoutParams.width; tranY = Float.parseFloat(tag.getTagY()) / 720 * layoutParams.height - AndroidUtil.dip2px(context, 8); } else { tranX = Float.parseFloat(tag.getPercentX()) * layoutParams.width; tranY = Float.parseFloat(tag.getPercentY()) * layoutParams.height - AndroidUtil.dip2px(context, 8); } // Log.e("tranX", tranX + ""); // Log.e("tranY", tranY + ""); //链接图片是否占空间 int brandURLLength = 0; boolean isBrandUrl = false; if (tag.getBrandURL() != null && !tag.getBrandURL().equals("") && !tag.getBrandURL().equals("null")){ isBrandUrl = true; brandURLLength = AndroidUtil.dip2px(context, 25); } //圆点及箭头及文字空白区域的长度和 int pointArrowLength = AndroidUtil.dip2px(context, 35); //文字的长度 int textLength = AndroidUtil.getLineLength(tag.getBrand(), 28); // Log.e("position", position + ""); TextView tag_text; ImageView tag_brand; // 判断左边显示还是右边显示 if (layoutParams.width - tranX >= brandURLLength + pointArrowLength + textLength){ //右边显示 tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null); tag_text = (TextView) tag_layout.findViewById(R.id.tag_text); tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand); tag_layout.setTranslationX(tranX); tag_layout.setTranslationY(tranY); } else if (tranX < brandURLLength + pointArrowLength + textLength){ //显示不全 if (tranX * 2 < layoutParams.width){ //右边显示.但显示不全 tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null); tag_text = (TextView) tag_layout.findViewById(R.id.tag_text); tag_text.setWidth((int)(layoutParams.width - tranX - brandURLLength - pointArrowLength + AndroidUtil.dip2px(context, 10))); tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand); tag_layout.setTranslationX(tranX); tag_layout.setTranslationY(tranY); } else { //左边显示 不全 tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null); tag_text = (TextView) tag_layout.findViewById(R.id.tag_text); tag_text.setWidth((int)(tranX - brandURLLength - AndroidUtil.dip2px(context, 15))); tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand); tag_layout.setTranslationY(tranY); } } else { //左边显示 tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null); tag_text = (TextView) tag_layout.findViewById(R.id.tag_text); tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand); tag_layout.setTranslationX(tranX - AndroidUtil.dip2px(context, 25) - textLength - brandURLLength); tag_layout.setTranslationY(tranY); } tag_text.setText(tag.getBrand()); if (isBrandUrl){ tag_brand.setVisibility(View.VISIBLE); } viewHolder.fl.addView(tag_layout); tag_text.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(context, SearchResultActivity.class); ArrayList<String> list = new ArrayList<String>(); list.add(tag.getBrand()); intent.putExtra("sign_cont", list); intent.putExtra("from_flag", "&brand="); context.startActivity(intent); } }); tag_brand.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (tag.getBrandURL() != null && !tag.getBrandURL().equals("")){ Uri uri = Uri.parse(tag.getBrandURL()); Intent intent = new Intent(); intent.setData(uri); intent.setAction(Intent.ACTION_VIEW); try{ context.startActivity(intent); } catch (Exception e){ Toast toast = Toast.makeText(context, context.getResources().getString(R.string.err_uri), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 300); toast.show(); } } } }); } } addListener(convertView, followInfo, followInfo.getImage_id(), position); } else { convertView = lmap.get(position); viewHolder = (ViewHolder) convertView.getTag(); } return convertView; } public class ViewHolder{ ImageView user_logo; TextView user_name; TextView add_time; ImageView iv; TextView sign1; TextView sign2; TextView sign3; Button up; Button no_up; TextView up_num; ImageButton say_sth; ImageButton share; FrameLayout fl; TextView describe; } public void addListener(final View convertView,final FollowInfo followInfo, final String image_uri, final int position) { final Button no_up = (Button) convertView.findViewById(R.id.no_up); final Button yes_up = (Button) convertView.findViewById(R.id.yes_up); final TextView up_num = (TextView) convertView.findViewById(R.id.up_num); final ImageButton share = (ImageButton) convertView.findViewById(R.id.share); final TextView sign1 = (TextView) convertView.findViewById(R.id.sign1); final TextView sign2 = (TextView) convertView.findViewById(R.id.sign2); final TextView sign3 = (TextView) convertView.findViewById(R.id.sign3); final ImageButton say_sth = (ImageButton) convertView.findViewById(R.id.say_sth); final ImageView user_logo = (ImageView) convertView.findViewById(R.id.user_logo); final TextView user_name = (TextView) convertView.findViewById(R.id.user_name); no_up.setOnClickListener(new OnClickListener() { public void onClick(View v) { no_up.setVisibility(View.INVISIBLE); yes_up.setVisibility(View.VISIBLE); up_num.setText(Integer.parseInt(up_num.getText().toString()) + 1 + ""); new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id()); } }); yes_up.setOnClickListener(new OnClickListener() { public void onClick(View v) { no_up.setVisibility(View.VISIBLE); yes_up.setVisibility(View.INVISIBLE); up_num.setText(Integer.parseInt(up_num.getText().toString()) - 1 + ""); new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id()); } }); }
安卓开发关于listview的疑问
我想要实现按一下按钮就加一栏文字 但我以下面的代码按一下按钮都是在同一栏显示 请问如何换行显示啊? package com.example.xingkongkaohe; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; public class gongneng extends Activity{ private String result=""; private String shuzhi=""; private int caculate=0; private ListView lv; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.gongneng); Button button=(Button)findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { EditText edt=(EditText)findViewById(R.id.editText1); @Override public void onClick(View V) { // TODO Auto-generated method stub String zh=edt.getText().toString(); //public static String result=""; //int caculate=0; if (zh!="") { for(int i=0;i<zh.length();i++) //利用for循环逐个提取分析字符串! { char word = zh.charAt(i); if (64<word&&word<91) //利用ASCALL判断大写 { int a=word+32; //大写转小写 char test1=(char) a; result=result+test1; //System.out.println(result); } if (97<word&&word<122) //判断小写 { int b=word-32; //小写转大写 char test2=(char) b; result=result+test2; //System.out.println(result); } if (48<word&&word<57) //提取数字 { String test3 = String.valueOf(word); int c=Integer.parseInt(test3); caculate=caculate+c; //提取数字进行运算 shuzhi=String.valueOf(caculate); if (Character.isDigit(zh.charAt(i))) // 向result中加入数字 { result = result + Integer.parseInt(zh.charAt(i) + ""); } } } //下面是listview代码 关键! Toast.makeText(gongneng.this, result, Toast.LENGTH_SHORT).show(); ListView lv=(ListView)findViewById(R.id.lv); ArrayAdapter<String> adapter=new ArrayAdapter<String>(gongneng.this, android.R.layout.simple_expandable_list_item_1,getDate()); lv.setAdapter(adapter); //*********此处无法动态换行! } } }); } private String[] getDate() { return new String[] {result+"\n"+shuzhi}; } }
Android ListView 自定义Adapter 滑动时报空指针异常
问题背景:在制作一个即时聊天的APP中,聊天界面聊天消息的显示我使用了ListView,并且使用了自定义的Adapter,获取到聊天记录之后ListView可以正常显示,但是一旦滑动就会报空指针异常。我查看了很多博客,都没有提到与这个相关或者类似的错误已经被这个错误逼疯了,希望有了解的大神能够给予指点。 具体相关代码如下: 自定义的Adapter: ``` public class ChatMessageAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private List<MessageShow> messageShowList; public ChatMessageAdapter(Context context, List<MessageShow> messageShowList){ layoutInflater = LayoutInflater.from(context); this.messageShowList = messageShowList; } @Override public int getCount() { return messageShowList.size(); } @Override public Object getItem(int position) { return messageShowList.get(position); } @Override public int getItemViewType(int position) { if(messageShowList.get(position).getMessageType()==0) return 0; else return 1; } //Item类型的总数 @Override public int getViewTypeCount() { return 2; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { MessageShow messageShow = messageShowList.get(position); ViewHolder viewHolder = null; if(convertView == null){ if(messageShow.getMessageType() == 0){ convertView = layoutInflater.inflate(R.layout.from_message_item,null); viewHolder = new ViewHolder(); // viewHolder.imageView = (ImageView) convertView.findViewById(R.id.from_user_icons); viewHolder.time = (TextView) convertView.findViewById(R.id.from_time); viewHolder.message = (TextView) convertView.findViewById(R.id.from_message); } else{ convertView = layoutInflater.inflate(R.layout.to_message_item,null); viewHolder = new ViewHolder(); // viewHolder.imageView = (ImageView) convertView.findViewById(R.id.to_user_icons); viewHolder.time = (TextView) convertView.findViewById(R.id.to_time); viewHolder.message = (TextView) convertView.findViewById(R.id.to_message); } } else { viewHolder = (ViewHolder) convertView.getTag(); } System.out.println("我到了这里"+position); System.out.println("我添加了适配器: "+messageShow.getContents()); // viewHolder.imageView.setImageResource(R.drawable.photo); //报空指针异常的是这里 viewHolder.message.setText(messageShow.getContents()); viewHolder.time.setText(messageShow.getTime()); return convertView; } private final class ViewHolder{ // ImageView imageView; TextView time; TextView message; } ``` ,ChatActivity代码如下: ``` private List<MessageShow> showMessageList; private ChatMessageAdapter chatMessageAdapter; 、、、省略无关 //初始化数据 private void initData(){ showMessageList = new ArrayList<MessageShow>(); chatMessageAdapter = new ChatMessageAdapter(this,showMessageList); listView.setAdapter(chatMessageAdapter); getMessageRecord(); chatMessageAdapter.notifyDataSetChanged(); } ``` 其中获取聊天记录我已经在控制台打印出来检查过了,没有错误,而ListView能够显示说明Apapter也不会有基本的错误,但是还是报空指针。我对错误的猜测如下: 虽然给的数据集可能有几十项,但是Adapter加载的时候只加载了当前显示的几项,后面的没加载,等我我滑动之后去加载的时候没加载到数据就报空指针了。但是这不太科学啊,我看了好多博客发现都没有专门说到这点,仔细检查代码也不知道应该怎么改,求指教。报错信息如下: ``` I/System.out: 我到了这里1 I/System.out: 我添加了适配器: 图片这些不能点击? I/System.out: 我到了这里2 I/System.out: 我添加了适配器: 还没做那些功能呢233 I/System.out: 我到了这里3 I/System.out: 我添加了适配器: 图片和表情 I/System.out: 我到了这里4 I/System.out: 我添加了适配器: 额 I/System.out: 我到了这里5 I/System.out: 我添加了适配器: 准备等APP开发完之后再说 I/System.out: 我到了这里6 I/System.out: 我添加了适配器: 真的挺费脑的 I/System.out: 我到了这里7 I/System.out: 我添加了适配器: 嗯 加油 E/InputEventReceiver: Exception dispatching input event. D/AndroidRuntime: Shutting down VM W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6160908) E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at cn.justwithme.withme.Adapaer.ChatMessageAdapter$override.getView(ChatMessageAdapter.java:84) at cn.justwithme.withme.Adapaer.ChatMessageAdapter$override.access$dispatch(ChatMessageAdapter.java) at cn.justwithme.withme.Adapaer.ChatMessageAdapter.getView(ChatMessageAdapter.java:0) ``` 本来有十几项的,第一页只有7项,我在Adapter的输出就只出输出了7项。 ![图片说明](https://img-ask.csdn.net/upload/201702/19/1487495789_116858.png) ![图片说明](https://img-ask.csdn.net/upload/201702/19/1487495801_419892.png)
自学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; } } }; }
给listview添加了7个却只显示1个
![图片说明](https://img-ask.csdn.net/upload/201704/25/1493070109_174345.png) ![图片说明](https://img-ask.csdn.net/upload/201704/25/1493070142_382379.jpg) ``` package com.example.weixi; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; public class FragmentOne extends Fragment { private MyListView listOne = null; Context contexta; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // contexta=container.getContext(); View view = inflater.inflate(R.layout.activity_fragment_one, container, false); listOne = (MyListView) view.findViewById(R.id.myList); //需要循环输出的消息 final String[] name = new String[]{ "2017年腾讯微信新目标:干掉你钱包的实体会员卡", "苹果又获多个专利:这次针对智能键盘和防水", "无人驾驶汽车这一年:承诺、潜力和危险同在", "快讯:韩国认为高通垄断,处罚8.54亿美元", "《最终幻想》之父坂口博信透露新作消息:将于2017年发布", "发布在即:三星Galaxy C5 Pro获Wi-Fi认证", "底层谋生的萧条:那些被机器夺去工作的失业者们"}; final String[] message = new String[]{ "2017年腾讯微信新目标:干掉你钱包的实体会员卡", "苹果又获多个专利:这次针对智能键盘和防水", "无人驾驶汽车这一年:承诺、潜力和危险同在", "快讯:韩国认为高通垄断,处罚8.54亿美元", "《最终幻想》之父坂口博信透露新作消息:将于2017年发布", "发布在即:三星Galaxy C5 Pro获Wi-Fi认证", "底层谋生的萧条:那些被机器夺去工作的失业者们"}; /* final String[] message2=new String[]{" 12月28日消息,在今天上午的微信公开课Pro当中,腾讯微信工作人员表示,未来微信将会支持虚拟会员卡功能,对于商家来说将通过腾讯微信获得更为精确的用户大数据,将会员卡功能发挥到极致。\n" + " 通常我们在使用会员卡时,商家获得的个人信息存在由于隐私问题作假的问题,借助腾讯大数据,将会在保证隐私的前提下获得更为准确的用户数据,\n" + " 简化会员卡注册流程,实现会员卡的更多功能。", " 其实 iPad Pro 的 Smart Keyboard 已经是相当耐用了,不过很明显苹果希望它更具有吸引力,近日,苹果就获得了一项与 Smart Keyboard 相关的,专利号为 9527263 的“防污织物”专利。据悉,这个专利描绘了一个由非常规抗污染树脂所构成的防污层,其可以符合任何的纹理几何形状。苹果的目标是在 Smart Keyboard 表面添加这个防污层,而且添加防污层后,不会对 Smart Keyboard 的外观和使用感觉产生任何影响。\n" + " 相信那些经常清理 Smart Keyboard 表面污迹的朋友,会很喜欢这个专利。 同时,苹果还取得了一个与防水相关的专利(专利号为 9529391),而这个专利所面对的对象看起来会是便携式电子设备。\n" + "该专利其实是让便携式电子设备的密封物理按钮能有效的防止液体的进入。我们都知道现在的 iPhone ,还有 Apple Watch 都具备了防水功能,\n" + "特别是新的 Apple Watch 2 ,我们终于可以佩戴着它去游泳。而今年的 iPhone 7 配置了防水功能以后也解决了不少用户的后顾之忧,不过我们也知道,iPhone 7 的防水功能其实还远远称不上完美,所以说,苹果当然希望继续拿下与防水有关的专利。\n" + "不过还是那句话,取得专利和专利什么时候商用,完全是两码事,很多苹果获得的专利,最终都没有应用到相关的设备或者软件上,不知道苹果最新获得的这个专利,命运又会是怎么样的呢?", "外媒今日刊文指出,回首无人驾驶汽车技术在2016年的发展,关于这种新技术的承诺、潜力和危险纷纷浮现出来,今年确实是无人驾驶汽车的关键年度。现在,无人驾驶汽车已经不再是能否实现的问题,而是何时能够走进大众生活的问题。原文如下:\n" + "\n" + "各大媒体今年刊发了不少关于无人驾驶汽车和自动驾驶汽车的发展前景和潜力的文章,奇怪的是接近年底时却冒出一个不和谐的音调:Uber用一辆平板拖车将其数十辆测试用无人驾驶汽车运出了旧金山市。Uber前不久才信誓旦旦地宣布它将在家乡测试其无人驾驶汽车,然后迅速就被打脸,不得不收回它说的话,因为它用来测试的这批无人驾驶汽车似乎没有申请正确的牌照。\n" + "\n" + "这种所谓的未来交通工具甚至不允许驶出城镇,无人驾驶汽车的未来前景似乎并不怎么光明。但是经过一年的努力,无人驾驶汽车在技术、后勤和监管上均取得了突破性进展,包括Uber已经成功地在匹兹堡展开了试点项目,整个汽车行业也进入了你追我赶的疯狂模式,无人驾驶汽车的未来似乎比以往任何时候都更加光明了,照此看来,Uber在旧金山市的遭遇似乎并不能够算作失败,顶多算是一点小挫折。Uber只是无人驾驶汽车领域中的一员,还有很多像它这样的公司正在开发无人驾驶汽车技术并迅速取得了巨大进展,它们有可能改变我们的交通系统、城市规划以及经济系统。\n" + "\n" + "虽然无人驾驶汽车似乎还要很多年才能广泛普及,但是这项技术已经获得广泛的支持。现在,无人驾驶汽车已经不再是能否实现的问题,而是何时能够走进大众生活的问题。实现无人驾驶技术潜力的最大障碍也许不是计算机错误而是人为错误。下面我们就来看看无人驾驶技术在今年取得的重要进展。" , "","","",""};*/ final int[] photo = new int[]{R.drawable.abc_ic_clear, R.drawable.abc_ab_bottom_solid_dark_holo, R.drawable.abc_list_selector_holo_light, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher}; /* final int[] photo2=new int[]{ R.mipmap.wx_1,R.mipmap.wx_2,R.mipmap.wx_3, R.mipmap.wx_4,R.mipmap.wx_5,R.mipmap.wx_6,R.mipmap.wx_1}; */ List<MyEntity> myEntitys = new ArrayList<MyEntity>(); MyEntity map1 = new MyEntity(R.drawable.abc_ic_clear,name[0]); myEntitys.add(map1); MyEntity map2 = new MyEntity(R.drawable.abc_ab_bottom_solid_dark_holo,name[1]); myEntitys.add(map2); MyEntity map3 = new MyEntity( R.drawable.abc_list_selector_holo_light,name[2]); myEntitys.add(map3); MyEntity map4 = new MyEntity(R.drawable.ic_launcher,name[3]); myEntitys.add(map4); MyEntity map5 = new MyEntity(R.drawable.ic_launcher,name[4]); myEntitys.add(map5); MyEntity map6 = new MyEntity(R.drawable.ic_launcher,name[5]); myEntitys.add(map6); MyEntity map7 = new MyEntity(R.drawable.ic_launcher,name[6]); myEntitys.add(map7); //传参到listview表,标题 listOne.setAdapter(new MyAdapter(getActivity(),R.layout.listview_item,myEntitys)); listOne.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Bundle bundle = new Bundle(); bundle.putInt("photo", photo[arg2]); bundle.putString("message", message[arg2]); /* bundle.putString("message2", message2[arg2]); bundle.putInt("photo2",photo2[arg2]); */ Intent intent = new Intent(); intent.putExtras(bundle); //intent.setClass(getActivity(), MoveList.class); Log.i("message", message[arg2]); /* Log.i("message2", message2[arg2]); */ // startActivity(intent); } }); return view; } } ```
小白安卓开发:怎么在Fragment里添加ListVIew啊?初学者疑惑
![图片说明](https://img-ask.csdn.net/upload/201904/30/1556630483_419658.png)
大四安卓学习mars播放器Listview的问题
抱歉麻烦各位了,本人大四狗,目前在看安卓开发,学习mars老师的音乐播放器时遇到了 个问题,就是设置了SimpleAdapter之后仍然无法显示歌名的内容,只显示了个空白的 TEXTVIEW,我研究了无数次依旧没有发现问题在哪,因此来求教各位大神 附上全部代码,没有错误信息,就是显示不出来,每一步调试过确定都有值 代码如下 ``` package com.example.android_mp3; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import com.download.HttpDownloader; import com.model.Mp3Info; import com.xml.Mp3ListContentHandler; import android.app.ListActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends ListActivity { private static final int UPDATE = 1; private static final int ABOUT = 2; private List<Mp3Info> mp3Infos = null; /* * 用户点击menu按钮后调用,可加入自己的按钮控件 */ @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO 自动生成的方法存根 // 组id,物品id,排序,显示内容 menu.add(0, UPDATE, 1, R.string.mp3list_update); menu.addSubMenu(0, ABOUT, 2, R.string.mp3list_about); return super.onCreateOptionsMenu(menu); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(r).start(); // updateListView(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == UPDATE) { } else if (item.getItemId() == ABOUT) { System.out.println("1"); // updateListView(); } return super.onOptionsItemSelected(item); } // public void updateListView() { // new Thread(new Runnable() { // // @Override // public void run() { // // TODO 自动生成的方法存根 // String xml = downloadXML("http://192.168.88.100:8080/mp3/resources.xml"); // System.out.println("XML------>"); // System.out.println(xml); // System.out.println(Thread.currentThread().getName()); // mp3Infos = parse(xml); // Message msg = Message.obtain(); // msg.sendToTarget(); // } // }) .start(); // List<HashMap<String, String>> list = new ArrayList<HashMap<String, // String>>(); // for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { // Mp3Info mp3Info = (Mp3Info) iterator.next(); // HashMap<String, String> map = new HashMap<String, String>(); // map.put("mp3_name", mp3Info.getMp3Name()); // map.put("mp3_size", mp3Info.getMp3Size()); // list.add(map); // } // SimpleAdapter adapter = new SimpleAdapter(this, list, // R.layout.mp3info_xml, new String[] { "mp3_name", "mp3_size" }, // new int[] { R.id.mp3_name, R.id.mp3_size }); // setListAdapter(adapter); // } private Handler handler = new Handler() { public void handleMessage(Message msg) { // 显示列表 showList(); } }; Runnable r = new Runnable() { public void run() { String xml = downloadXML("http://192.168.88.100:8080/mp3/resources.xml"); System.out.println("XML------>"); System.out.println(xml); // 解析下载的XML文件 mp3Infos = parse(xml); Message msg = handler.obtainMessage(); msg.sendToTarget(); } }; public void showList() { List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); HashMap<String, String> map = new HashMap<String, String>(); map.put("mp3_name", mp3Info.getMp3Name()); map.put("mp3_size", mp3Info.getMp3Size()); list.add(map); } SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, list, R.layout.mp3info_xml, new String[] { "mp3Name", "mp3Size" }, new int[] { R.id.mp3_name, R.id.mp3_size }); setListAdapter(simpleAdapter); } private String downloadXML(String urlString) { HttpDownloader httpDownloader = new HttpDownloader(); String result = httpDownloader.download(urlString); return result; } private List<Mp3Info> parse(String xmlStr) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); List<Mp3Info> infos = new ArrayList<Mp3Info>(); try { XMLReader xmlReader = saxParserFactory.newSAXParser() .getXMLReader(); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler( infos); xmlReader.setContentHandler(mp3ListContentHandler); xmlReader.parse(new InputSource(new StringReader(xmlStr))); for (Iterator iterator = infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); System.out.println(mp3Info); } } catch (SAXException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return infos; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // Mp3Info mp3Info = mp3Infos.get(position); // System.out.println("----->mp3info" + mp3Info); super.onListItemClick(l, v, position, id); } } ``` xml的 ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingBottom="1dip" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="1dip"> <TextView android:id="@+id/mp3_name" android:layout_width="180dip" android:layout_height="30dip" android:textSize="10pt" /> <TextView android:id="@+id/mp3_size" android:layout_width="180dip" android:layout_height="30dip" android:textSize="10pt" /> </LinearLayout> ``` ![图片说明](https://img-ask.csdn.net/upload/201512/11/1449808460_952004.png) 调试的是有值的![图片说明](https://img-ask.csdn.net/upload/201512/11/1449823354_830574.png) 啊啊啊啊啊啊弄了好久啊,谁知道什么问题的帮帮我啊
Android 蓝牙通信问题
安卓开发萌新。在做一个蓝牙通信的APP,现在打开蓝牙可以搜索到周围一开启蓝牙的设备,点击连接后,也会出现配对的窗口,但软件会出现闪退,不知是何问题。以下是源代码,希望各路大佬可以帮我解决一下这个问题,是否是线程未开启呢。是否是因为我已经设置与单片机通信的UUID的问题。 ``` package com.windfire; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.UUID; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class WindFireDemoActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ /*建立蓝牙适配器,搜索可连接设备,进行配对,*/ public static final int RECV_VIEW = 0; private BluetoothAdapter mBluetoothAdapter;//蓝牙适配器 private ArrayAdapter<String> deviceAdapter;//设备显示列表适配器 private ConnectThread connectthread; private List<String> listDevices; private ListView text;//显示需要配对设备 private Button parameterinput;//参数录入 private Button teststart;//开始测试 private Button search;//寻找设备按钮 private Button send;//发送按钮 private TextView datatest; private boolean sendflag = false; private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//蓝牙串口服务 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_Black_NoTitleBar); setContentView(R.layout.main); initview();//实例化 initBroadcast();//初始化广播 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取本地蓝牙适配器,初始化蓝牙 //是否支持蓝牙功能 if(mBluetoothAdapter == null) { Toast.makeText(WindFireDemoActivity.this, "所持设备不支持蓝牙", Toast.LENGTH_SHORT).show(); } } /************************定义广播接收,查找设备,检查配对信息,添加到listDevices中*************************/ private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction();//服务发现远程设备时 String str = ""; if(BluetoothDevice.ACTION_FOUND.equals(action))//每扫描到一个设备,系统都会发送此广播 { //从Intent中获取device信息 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//获取搜索到的设备信息 str = device.getName()+ ":" + device.getAddress() + "\n"; //当发现的新设备不存在于设备配对列表中时,将设备的名字和地址添加到ArrayAdapter中 if(listDevices.indexOf(str) == -1)//防止重复添加 { listDevices.add(str);//添加搜索到的设备信息 deviceAdapter.notifyDataSetChanged(); } } else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Toast.makeText(WindFireDemoActivity.this, "Discovery finished", Toast.LENGTH_SHORT).show(); } } }; /**************************************UI实例化*************************************************/ public void initview() { parameterinput =(Button)findViewById(R.id.input); teststart =(Button)findViewById(R.id.start); search =(Button)findViewById(R.id.button); send =(Button)findViewById(R.id.send); text = (ListView)findViewById(R.id.listView1); datatest = (TextView)findViewById(R.id.datatest); parameterinput.setOnClickListener(this); teststart.setOnClickListener(this); search.setOnClickListener(this); send.setOnClickListener(this); listDevices = new ArrayList<String>(); deviceAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listDevices);//列表显示listDevices的设备名称及mac text.setAdapter(deviceAdapter); text.setOnItemClickListener( new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> adapterview, View view, int position,long id) { // TODO Auto-generated method stub //绑定所选择的蓝牙MAC地址设备 String str = deviceAdapter.getItem(position); if(null == str) { Toast.makeText(getApplicationContext(), "未选中设备", Toast.LENGTH_SHORT).show(); } String mac = str.substring(str.indexOf(":")+1).trim(); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mac);//以mac去创建一个device connectthread = new ConnectThread(device); connectthread.start(); Toast.makeText(getApplicationContext(), "连接到所选设备", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.input: Intent intent1 = new Intent(WindFireDemoActivity.this,parametershow.class); startActivity(intent1); break; case R.id.start: Intent intent2 = new Intent(WindFireDemoActivity.this,datashow.class); startActivity(intent2); break; case R.id.button: if(!mBluetoothAdapter.isEnabled()) { Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enabler);//开启蓝牙 if (mBluetoothAdapter.isEnabled())//设置可见 { if (mBluetoothAdapter.getScanMode()!=BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200); startActivity(discoverableIntent); } } } if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); Toast.makeText(getApplicationContext(), "Exit Discovery", Toast.LENGTH_SHORT).show(); } else//搜索未开始 { mBluetoothAdapter.startDiscovery();//开始搜索 Toast.makeText(getApplicationContext(), "Start Discovery", Toast.LENGTH_SHORT).show(); } break; case R.id.send: if(connectthread != null)//连接建立完成,准备发送指令开始通信 { try { sendflag = true; String str = "0x33"; connectthread.write(getHexBytes(str)); datatest.setText("send success"); } catch(Exception e) { e.printStackTrace(); } } else { Toast.makeText(WindFireDemoActivity.this, "未连接蓝牙设备", Toast.LENGTH_SHORT).show(); } break; } } /**************************************Broadcast初始化*************************************************/ public void initBroadcast(){ IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver,filter); } /**************************************连接线程*************************************************/ public class ConnectThread extends Thread { private BluetoothSocket btSocket; private InputStream in; private OutputStream out; //private BluetoothDevice btDev; public ConnectThread (BluetoothDevice device) { try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch(IOException e) { e.printStackTrace(); } } public void run() { //发现服务会减慢连接建立速度,因此关闭掉 if(mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); }//退出搜索 try { //请求连接,该操作会阻塞线程 btSocket.connect(); Toast.makeText(WindFireDemoActivity.this, "连接建立", Toast.LENGTH_SHORT).show(); in = btSocket.getInputStream(); out = btSocket.getOutputStream(); if(sendflag) { new Thread(new Runnable(){ @Override public void run(){ byte[] buffer = new byte[1024]; int bytes; try{ while((bytes = in.read(buffer)) != -1) { String str = new String(buffer,"UTF-8"); str = str.substring(0, bytes); if(str.endsWith(" ")) { datatest.append(str); continue; } Bundle bundle = new Bundle(); Message message = new Message(); bundle.putString("recv", datatest.toString()); message.what = RECV_VIEW; message.setData(bundle); handler.sendMessage(message); } } catch(IOException e) { e.printStackTrace(); } } }).start(); } } catch(IOException e){ try{ btSocket.close(); } catch(IOException e1){ e1.printStackTrace(); } e.printStackTrace(); } } public void write(byte[] bytes) { try { out.write(bytes); } catch(IOException e) { e.printStackTrace(); } } public void cancel() { try { btSocket.close(); } catch (IOException e) { } } } /******************************************Handler处理message*************************************/ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { Bundle bundle = null; switch(msg.what) { case RECV_VIEW: bundle = msg.getData(); String recv = bundle.getString("recv"); datatest.append(recv+"\n"); break; default: Toast.makeText(getApplicationContext(), "接受信息失败", Toast.LENGTH_SHORT).show(); /*case NOTICE_VIEW: bundle = msg.getData(); String notice = bundle.getString("notice"); datatest.append(notice);*/ break; } } }; public byte[] getHexBytes(String message) { int len = message.length() / 2; char[] chars = message.toCharArray(); String[] hexStr = new String[len]; byte[] bytes = new byte[len]; for (int i = 0, j = 0; j < len; i += 2, j++) { hexStr[j] = "" + chars[i] + chars[i + 1]; bytes[j] = (byte) Integer.parseInt(hexStr[j], 16); } return bytes; } @Override protected void onDestroy() { unregisterReceiver(mReceiver); super.onDestroy(); } } ``` 希望尽快解答
安卓,viewpager中什么都不显示,求指点
应该已经用fragmentPagerAdapter设置好了fragment,可是viewpager set了adapter后,什么都没有。 先上图: ![图片说明](https://img-ask.csdn.net/upload/201603/07/1457362917_372384.png) ![图片说明](https://img-ask.csdn.net/upload/201603/07/1457362927_190250.png) 下面是content_main,在其中添加了viewpager的组件 ``` <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:showIn="@layout/activity_main" tools:context=".MainActivity" android:id="@+id/drawerlayout"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent"/> <ListView android:id="@+id/listview" android:layout_width="240dp" android:layout_height="match_parent" android:background="#ff6666" android:layout_gravity="left"> </ListView> </android.support.v4.widget.DrawerLayout> ``` 下面是FragmentPagerAdapter: ``` public class MyFragmentPagerAdapter extends FragmentPagerAdapter { List<Fragment> list; String[] titles; public Fragment getItem(int position) { return list.get(position); } public int getCount() { return list.size(); } MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> list,String[] titles) { super(fm); this.list=list; this.titles=titles; } public CharSequence getPageTitle(int position) { return titles[position]; } } ``` 下面是mainActivity中的与viewpager有关的部分: ``` List<Fragment> listFragment=new ArrayList<Fragment>(); listFragment.add(f1); listFragment.add(f2); listFragment.add(f3); listFragment.add(f4); listFragment.add(f5); viewPager=(ViewPager)super.findViewById(R.id.viewpager); fragmentPagerAdapter=new MyFragmentPagerAdapter(getSupportFragmentManager(),listFragment,new String[]{"标签1","标签2","标签3","标签4","标签5"}); viewPager.setAdapter(fragmentPagerAdapter); tabLayout=(TabLayout)super.findViewById(R.id.tablayout); for(int i=0;i<5;i++) { tabLayout.addTab(tabLayout.newTab()); } tabLayout.setTabMode(TabLayout.MODE_FIXED); tabLayout.setupWithViewPager(viewPager); ``` 下面是填充viewpager第一页的fragment1的代码: ``` public class Fragment1 extends Fragment { RecyclerView recyclerView; MyAdapter myAdapter; public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanced) { View v=inflater.inflate(R.layout.fragment1,container,false); myAdapter=new MyAdapter(getActivity()); recyclerView=(RecyclerView)v.findViewById(R.id.recyclerview); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity()); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setAdapter(myAdapter); return v; } } ``` 从上图已可见,这部分内容是不显示的,以下是viewpager第二页的fragment2: ``` public class Fragment2 extends Fragment { public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanced) { View v=inflater.inflate(R.layout.fragment2,container,false); return v; } } ``` 后面的fragment与此fragment类似,就不贴了。viewpager中什么都没有,但是从上面MainActivity中的setupWithViewPager的tabLayout就可以获取到标题。 请问应该怎么解决?
3G手机Android应用开发第四天课程2.从网络获取xml格式的视频资讯,我的解析xml出现错误
按照视频中的例子做,出现如下错误: web项目运行正常,如访问:http://localhost:8088/videoweb/video/list.do 返回的xml为: <?xml version="1.0" encoding="UTF-8" ?> - <videos> - <video id="78"> <title>喜羊羊与灰太狼全集</title> <timelength>90</timelength> </video> - <video id="78"> <title>实拍舰载直升东海救援演习</title> <timelength>20</timelength> </video> - <video id="78"> <title>喀麦隆VS荷兰</title> <timelength>30</timelength> </video> </videos> 这些短横线不知道是什么东东。 android项目是想解析这个xml文件,解析器的代码如下: public class VideoService { public static List<Video> getLastVideos() throws Exception{ String path = "http://192.168.1.100:8088/videoweb/video/list.do"; URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setReadTimeout(5*1000); conn.setRequestMethod("GET"); InputStream inStream = conn.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len=inStream.read(buffer))!=-1){ bos.write(buffer, 0, len); } return parseXML(inStream); } private static List<Video> parseXML(InputStream inStream) throws Exception{ List<Video> videos = null; Video video = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inStream, "UTF-8"); int eventType = parser.getEventType();//产生第一个事件 while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件 switch (eventType) { case XmlPullParser.START_DOCUMENT: videos = new ArrayList<Video>(); break; case XmlPullParser.START_TAG: String name = parser.getName();//获取解析器当前指向的元素的名称 if("video".equals(name)){ video = new Video(); video.setId(new Integer(parser.getAttributeValue(0))); } if(video!=null){ if("title".equals(name)){ video.setTitle(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值 } if("timelength".equals(name)){ video.setTime(new Integer(parser.nextText())); } } break; case XmlPullParser.END_TAG: if("video".equals(parser.getName())){ videos.add(video); video = null; } break; } eventType = parser.next(); } return videos; } } 而activity代码如下: public class VideoClientActivity extends Activity { private ListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView)this.findViewById(R.id.listView); try { List<Video> videos = VideoService.getLastVideos(); List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); for(Video video : videos){ HashMap<String, Object> item = new HashMap<String, Object>(); item.put("id", video.getId()); item.put("title", video.getTitle()); item.put("timelength", "时长:"+ video.getTime()); data.add(item); } Log.i("size", videos.size()+""); SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength}); listView.setAdapter(adapter); } catch (Exception e) { Toast.makeText(VideoClientActivity.this, "获取最新视频资讯失败", 1).show(); Log.e("VideoClientActivity", e.toString()); } } } 在LogCat中添加一个过滤器:VideoClientActivity,出现的错误是: [color=red]11-13 08:14:21.303: ERROR/VideoClientActivity(365): org.xmlpull.v1.XmlPullParserException: Premature end of document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found[/color] 请各位大侠解救。 :(
安卓开发生命线游戏开发的实现
生命线游戏 显示的数据是用listview实现的吗?怎么实现数据在下面自动添加呢?还有点击选择按钮后,按钮指定的内容是怎么加上去的?
关于安卓开发的一个下载问题
//这里是一个片段源代码,下面还有一张出错的日志,希望好心的大神解答一下,这个问题搞了一天还没有结果; package mars.mp3player.mp3player; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import mars.download.HttpDownloader; import mars.model.Mp3Info; import mars.mp3player.service.DownloadService; import mars.xml.Mp3ListContentHandle; import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class Mp3ListActivity extends ListActivity { private static final int UPDATE =1; private static final int ABOUT =2; private List<Mp3Info> mp3Infos =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.remote_mp3_list); updateListView(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.mp3_list, menu); menu.add(0, UPDATE, 1, R.string.mp3list_update); menu.add(0, ABOUT, 2, R.string.mp3list_about); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if (item.getItemId()==UPDATE) { //用户点击了更新按钮 //下载包含所有MP3 基本信息的xml文件中 System.out.println("选择的类别"+item.getItemId()); updateListView();//有错误 } else if (item.getItemId()==ABOUT) { //用户点击了关于按钮 } return super.onOptionsItemSelected(item); } private String downloadXMl(String urlStr){ HttpDownloader httpDownloader = new HttpDownloader(); String result =httpDownloader.download(urlStr);//有错误 return result; } private List<Mp3Info> parse(String xmlStr) { SAXParserFactory saxParserFactory =SAXParserFactory.newInstance(); List<Mp3Info> infos=null; try { XMLReader xmlReader =saxParserFactory.newSAXParser().getXMLReader(); infos =new ArrayList<Mp3Info>(); Mp3ListContentHandle mp3ListContentHandle =new Mp3ListContentHandle(infos); xmlReader.setContentHandler(mp3ListContentHandle); xmlReader.parse(new InputSource(new StringReader(xmlStr))); for( Iterator iterator =infos.iterator();iterator.hasNext();) { Mp3Info mp3Info =(Mp3Info) iterator.next(); System.out.println(mp3Info); } } catch (Exception e) { // TODO: handle exception } return infos; } private void updateListView() { String xml =downloadXMl("http://192.168.191.1:8080/mp3/resources.xml");//有错误 System.out.println("xml---->"+xml);//这里没有下载到! //parse(xml); //对xMl文件进行解析,并将解的的结果放到MP3info当中的list中去 mp3Infos =parse(xml); SimpleAdapter simpleAdapter=buildSimpleAdapter(mp3Infos); setListAdapter(simpleAdapter); } private SimpleAdapter buildSimpleAdapter(List<Mp3Info> mp3Infos){ //生成一个额list对象,并按照simple的标准,将MP3info当中的数据添加的list当中 List<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>(); for (Iterator iterator = mp3Infos.iterator();iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); HashMap<String, String> map = new HashMap<String, String>(); map.put("mp3_id",mp3Info.getId()); map.put("mp3_name",mp3Info.getMp3Name()); list.add(map); } //创建一个adapter对象 SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.mp3info_item, new String[]{"mp3_id","mp3_name"},new int[]{R.id.mp3_id,R.id.mp3_name}); return simpleAdapter; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub Mp3Info mp3Info = mp3Infos.get(position); Intent intent = new Intent (); //将MP3info对象放入intent中 intent.putExtra("mp3info", mp3Info); intent.setClass(this, DownloadService.class); //启动service startService(intent); super.onListItemClick(l, v, position, id); } } ![图片说明](https://img-ask.csdn.net/upload/201508/10/1439199853_602919.jpg)
显示更新成功了,但我在查询数据时按选择按钮并没有更新
![图片说明](https://img-ask.csdn.net/upload/201612/23/1482487708_958015.png) ![图片说明](https://img-ask.csdn.net/upload/201612/23/1482487726_658746.png) MainActivity.java ``` package com.example.sqlite; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ private static final String TAG="Add"; private static final ListAdapter listAdapter = null; private EditText ecode,ename,ebirth; private Button badd,bdel,bupdate,bsele; private SQLiteDatabase db=null; private TextView tedatashow; private ListView datashow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ecode=(EditText)findViewById(R.id.ecode); ename=(EditText)findViewById(R.id.ename); ebirth=(EditText)findViewById(R.id.ebirth); badd=(Button)findViewById(R.id.badd); bdel=(Button)findViewById(R.id.bdel); bupdate=(Button)findViewById(R.id.bupdate); bsele=(Button)findViewById(R.id.bsele); tedatashow=(TextView)findViewById(R.id.tedatashow); datashow=(ListView)findViewById(R.id.datashow); badd.setOnClickListener((android.view.View.OnClickListener) this); bdel.setOnClickListener((android.view.View.OnClickListener) this); bsele.setOnClickListener((android.view.View.OnClickListener) this); bupdate.setOnClickListener((android.view.View.OnClickListener) this); } public void onClick(View v) { // TODO Auto-generated method stub MyDBHelper helper=new MyDBHelper(this); String code=ecode.getText().toString().trim(); String name=ename.getText().toString().trim(); String birth=ebirth.getText().toString().trim(); if(v==badd) { if(code.length()!=0 && name.length()!=0 && birth.length()!=0) { try { db=helper.getWritableDatabase(); String sql="INSERT INTO user(ecode,ename,ebirth)" +"VALUES('"+ecode.getText()+"','" +ename.getText()+"','" +ebirth.getText()+"')"; db.execSQL(sql); Toast.makeText(this, "添加成功!", Toast.LENGTH_LONG).show(); ecode.setText(""); ename.setText(""); ebirth.setText(""); } catch(Exception e) { Toast.makeText(this, "出错了!"+ e.getMessage(),Toast.LENGTH_LONG).show(); } } else Toast.makeText(this, "学号和姓名出生日期不能为空!", Toast.LENGTH_LONG).show(); } if(v==bdel) { if(code.length()!=0) { try { db=helper.getWritableDatabase(); String sql="delete from user where ecode='"+ecode.getText()+"'"; db.execSQL(sql); Toast.makeText(this, "成功删除!", Toast.LENGTH_LONG).show(); ecode.setText(""); } catch(Exception e) { Toast.makeText(this, "出错了!", Toast.LENGTH_LONG).show(); } } } if(v==bupdate) { db=helper.getWritableDatabase(); if(code.length()!=0 && name.length()!=0 && birth.length()!=0) { try { String sql="update user set ecode='"+ecode.getText() +"'where ename='"+ename.getText()+"'and ebirth='" +ebirth.getText()+"'and ecode='" +ecode.getText()+"'"; db.execSQL(sql); Toast.makeText(this, "成功更新!", Toast.LENGTH_LONG).show(); ecode.setText(""); ename.setText(""); ebirth.setText(""); } catch(Exception e) { Toast.makeText(this, "出错了!"+e.getMessage(),Toast.LENGTH_LONG).show(); } } else Toast.makeText(this, "学号姓名出生日期不能为空!", Toast.LENGTH_LONG).show(); } if(v==bsele) { if(code.length()!=0) { try { ArrayList<String> all=new ArrayList<String>(); String sql="select * from user where ecode =? or ename =? or ebirth =? "; Cursor result=helper.getReadableDatabase().rawQuery(sql,new String[]{code,code,code}); while(result.moveToNext()) { all.add("["+result.getString(0)+"]"+""+result.getString(1)+","+result.getString(2)); } ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,all); datashow.setAdapter(arrayAdapter); } catch(Exception f) { Toast.makeText(this, "显示不了", Toast.LENGTH_LONG).show(); } } } db.close(); } @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 boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ``` MyDBHelper.java ``` package com.example.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyDBHelper extends SQLiteOpenHelper{ public MyDBHelper(Context context) { super(context,"mvdb.db",null,2); } public void onCreate(SQLiteDatabase db) { String sql="create table user(ecode text,ename text,ebirth text);"; db.execSQL(sql); } public void onUpgrade(SQLiteDatabase db,int arg1,int arg2) { String sql="create table user(ecode text,ename text,ebirth text);"; db.execSQL(sql); this.onCreate(db); } } ``` 显示更新成功了,但我在查询数据时按选择按钮并没有更新
运行后老说无法加载那个布局
运行后老说无法加载activity_fragment_one.xml这个布局 ![图片说明](https://img-ask.csdn.net/upload/201704/24/1492982717_243227.jpg) ``` package com.example.weixi; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; public class FragmentOne extends Fragment { private MyListView listOne = null; Context contexta; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { contexta=container.getContext(); View view = inflater.inflate(R.layout.activity_fragment_one, container, false); listOne = (MyListView) view.findViewById(R.id.myList); //需要循环输出的消息 final String[] name = new String[]{ "2017年腾讯微信新目标:干掉你钱包的实体会员卡", "苹果又获多个专利:这次针对智能键盘和防水", "无人驾驶汽车这一年:承诺、潜力和危险同在", "快讯:韩国认为高通垄断,处罚8.54亿美元", "《最终幻想》之父坂口博信透露新作消息:将于2017年发布", "发布在即:三星Galaxy C5 Pro获Wi-Fi认证", "底层谋生的萧条:那些被机器夺去工作的失业者们"}; final String[] message = new String[]{ "2017年腾讯微信新目标:干掉你钱包的实体会员卡", "苹果又获多个专利:这次针对智能键盘和防水", "无人驾驶汽车这一年:承诺、潜力和危险同在", "快讯:韩国认为高通垄断,处罚8.54亿美元", "《最终幻想》之父坂口博信透露新作消息:将于2017年发布", "发布在即:三星Galaxy C5 Pro获Wi-Fi认证", "底层谋生的萧条:那些被机器夺去工作的失业者们"}; /* final String[] message2=new String[]{" 12月28日消息,在今天上午的微信公开课Pro当中,腾讯微信工作人员表示,未来微信将会支持虚拟会员卡功能,对于商家来说将通过腾讯微信获得更为精确的用户大数据,将会员卡功能发挥到极致。\n" + " 通常我们在使用会员卡时,商家获得的个人信息存在由于隐私问题作假的问题,借助腾讯大数据,将会在保证隐私的前提下获得更为准确的用户数据,\n" + " 简化会员卡注册流程,实现会员卡的更多功能。", " 其实 iPad Pro 的 Smart Keyboard 已经是相当耐用了,不过很明显苹果希望它更具有吸引力,近日,苹果就获得了一项与 Smart Keyboard 相关的,专利号为 9527263 的“防污织物”专利。据悉,这个专利描绘了一个由非常规抗污染树脂所构成的防污层,其可以符合任何的纹理几何形状。苹果的目标是在 Smart Keyboard 表面添加这个防污层,而且添加防污层后,不会对 Smart Keyboard 的外观和使用感觉产生任何影响。\n" + " 相信那些经常清理 Smart Keyboard 表面污迹的朋友,会很喜欢这个专利。 同时,苹果还取得了一个与防水相关的专利(专利号为 9529391),而这个专利所面对的对象看起来会是便携式电子设备。\n" + "该专利其实是让便携式电子设备的密封物理按钮能有效的防止液体的进入。我们都知道现在的 iPhone ,还有 Apple Watch 都具备了防水功能,\n" + "特别是新的 Apple Watch 2 ,我们终于可以佩戴着它去游泳。而今年的 iPhone 7 配置了防水功能以后也解决了不少用户的后顾之忧,不过我们也知道,iPhone 7 的防水功能其实还远远称不上完美,所以说,苹果当然希望继续拿下与防水有关的专利。\n" + "不过还是那句话,取得专利和专利什么时候商用,完全是两码事,很多苹果获得的专利,最终都没有应用到相关的设备或者软件上,不知道苹果最新获得的这个专利,命运又会是怎么样的呢?", "外媒今日刊文指出,回首无人驾驶汽车技术在2016年的发展,关于这种新技术的承诺、潜力和危险纷纷浮现出来,今年确实是无人驾驶汽车的关键年度。现在,无人驾驶汽车已经不再是能否实现的问题,而是何时能够走进大众生活的问题。原文如下:\n" + "\n" + "各大媒体今年刊发了不少关于无人驾驶汽车和自动驾驶汽车的发展前景和潜力的文章,奇怪的是接近年底时却冒出一个不和谐的音调:Uber用一辆平板拖车将其数十辆测试用无人驾驶汽车运出了旧金山市。Uber前不久才信誓旦旦地宣布它将在家乡测试其无人驾驶汽车,然后迅速就被打脸,不得不收回它说的话,因为它用来测试的这批无人驾驶汽车似乎没有申请正确的牌照。\n" + "\n" + "这种所谓的未来交通工具甚至不允许驶出城镇,无人驾驶汽车的未来前景似乎并不怎么光明。但是经过一年的努力,无人驾驶汽车在技术、后勤和监管上均取得了突破性进展,包括Uber已经成功地在匹兹堡展开了试点项目,整个汽车行业也进入了你追我赶的疯狂模式,无人驾驶汽车的未来似乎比以往任何时候都更加光明了,照此看来,Uber在旧金山市的遭遇似乎并不能够算作失败,顶多算是一点小挫折。Uber只是无人驾驶汽车领域中的一员,还有很多像它这样的公司正在开发无人驾驶汽车技术并迅速取得了巨大进展,它们有可能改变我们的交通系统、城市规划以及经济系统。\n" + "\n" + "虽然无人驾驶汽车似乎还要很多年才能广泛普及,但是这项技术已经获得广泛的支持。现在,无人驾驶汽车已经不再是能否实现的问题,而是何时能够走进大众生活的问题。实现无人驾驶技术潜力的最大障碍也许不是计算机错误而是人为错误。下面我们就来看看无人驾驶技术在今年取得的重要进展。" , "","","",""};*/ final int[] photo = new int[]{R.drawable.abc_ic_clear, R.drawable.abc_ab_bottom_solid_dark_holo, R.drawable.abc_list_selector_holo_light, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher}; /* final int[] photo2=new int[]{ R.mipmap.wx_1,R.mipmap.wx_2,R.mipmap.wx_3, R.mipmap.wx_4,R.mipmap.wx_5,R.mipmap.wx_6,R.mipmap.wx_1}; */ List<MyEntity> myEntitys = new ArrayList<MyEntity>(); MyEntity map1 = new MyEntity(R.drawable.abc_ic_clear,name[0]); myEntitys.add(map1); MyEntity map2 = new MyEntity(R.drawable.abc_ab_bottom_solid_dark_holo,name[1]); myEntitys.add(map2); MyEntity map3 = new MyEntity( R.drawable.abc_list_selector_holo_light,name[2]); myEntitys.add(map3); MyEntity map4 = new MyEntity(R.drawable.ic_launcher,name[3]); myEntitys.add(map4); MyEntity map5 = new MyEntity(R.drawable.ic_launcher,name[4]); myEntitys.add(map5); MyEntity map6 = new MyEntity(R.drawable.ic_launcher,name[5]); myEntitys.add(map6); MyEntity map7 = new MyEntity(R.drawable.ic_launcher,name[6]); myEntitys.add(map7); //传参到listview表,标题 listOne.setAdapter(new MyAdapter(contexta,R.layout.listview_item,myEntitys)); listOne.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Bundle bundle = new Bundle(); bundle.putInt("photo", photo[arg2]); bundle.putString("message", message[arg2]); /* bundle.putString("message2", message2[arg2]); bundle.putInt("photo2",photo2[arg2]); */ Intent intent = new Intent(); intent.putExtras(bundle); //intent.setClass(getActivity(), MoveList.class); Log.i("message", message[arg2]); /* Log.i("message2", message2[arg2]); */ // startActivity(intent); } }); return view; } } ``` ![图片说明](https://img-ask.csdn.net/upload/201704/24/1492982882_939689.jpg)
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库——点这里跳转 文章目录Python语言高频重点汇总**GitHub面试宝典仓库——点这里跳转**1. 函数-传参2. 元类3. @staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9.
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字
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来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。 背景 笔者首次接触 Qt 大约是十多年前,当时试用了 Qt ,觉得不如 MFC 好用。现在 Qt 的 API、文档等都比较完善,在年初决定重新拾起,正所谓技多不压身,将 Qt 当为一种谋生工具亦未尝不可。利用春节假期的集中时间,快速专攻一下。 本系列名为“Qt实践”,故不是教程,笔者对 Qt 的定位是“使用”,可以帮助快速编写日常的工具,如串口、网络等。所以不
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
[Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。第一篇文章将分享腾讯疫情实时数据抓取,获取全国各地和贵州省各地区的实时数据,并将数据存储至本地,最后调用Maplotlib和Seaborn绘制中国各地区、贵州省各城市、新增人数的图形。希望这篇可视化分析文章对您有所帮助!
小白也会用的情人节表白神器
鉴于情人节女朋友总说直男,上网找了个模板,改了一下,发现效果还不错。然后又录了一个视频,发现凑合,能用。现在免费分享给程序员,去表白去吧。​​​​​​。当然比较low因为考研没时间优化,懒着优化了。 先看一下效果吧:页面太多了,这里我只放几个页面里面有音乐,还凑合不是太单调。 所有页面最后的合成效果: 接下来教大家如何使用: 新建文件夹:love 然后建立这几个...
论如何用python发qq消息轰炸虐狗好友
因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来。 首先 我的编程环境是: windows 10系统 python3.6 记得要下载win32 pip install win32 思路介绍 其实也非常简单 将要发出去的句子储存在列表中 然后用随机模块调用 将随机出来的元素储存在剪贴板中 连接QQ 找到指定对象 疯狂输出 怎么样,简单吧 开始打代码吧 imp...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问