android安卓开发 TextView空指针问题怎么解决

我的rmsg已经取到了 System.out.println打印输出也正常 那我设置textView22为什么就报了空指针呢 还是要把textView22放到别的地方去设置 我是点了一个按钮 开始刷卡 然后返回值通过handler发送 然后接收到以后设置成rmsg

    private TextView textView22;
    private String rmsg;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            rmsg=(String)msg.obj;
            System.out.println("我的卡号是******"+rmsg);
            textView22.setText(rmsg);
        }
    };

13个回答

textView22没有初始化 需要findviewById()

cheryl_chenxin
cheryl_chenxin 回复tankgoing: 你这初始化不是全局的当然不可以了,你只声明了全局变量,但你却在初始化的时候又声明了个新的去初始化,赋值时要用的textview当然空指针
大约 2 年之前 回复
tankgoing
tankgoing findviewbyid是有的。。。但是我写的是TextView textView22 = (TextView) findViewById(R.id.textView22); 把TextView拿掉了就可以了 根本没有意识到这里会出问题
大约 2 年之前 回复

textView22=(TextView)findViewById(R.id.textView22的id);

textview 没有初始化,然后到时setText导致空指针报错

在发送handler的地方用bundle的方式试试吧
Bundle bundle=new Bundle();
bundle.putString("msg",你的返回值);
Message message=new Message();
message.setData(bundle);
message.what=0x00;
myHandler.sendMessage(message);

接着在回到主线程的handler函数中
String msg1=msg.getData().getString("msg");
然后再进行Textview的设置吧

重写dispatchMessage函数

在oncreat()方法里,找到你的布局文件setContentView(R.layout.xxxx),xxx表示你真正的布局XML文件,在布局XML文件中找到你的TextView控件,给它
赋一个id属性,如:android:id="@+id/tv_card"。
在setContentView方法下面,写一句textView22 = (TextView)findViewById.(R.id.tv_card);
这样试用textView22.setText(rmsg);的时候就不用空指针了。
如果还有问题欢迎回复。

xiao_pin_nong
xiao_pin_nong textview 没有初始化,然后到时setText导致空指针报错
接近 2 年之前 回复
u010507199
还没想好ne 要获取控件啊,findviewById()
大约 2 年之前 回复
tankgoing
tankgoing TextView textView22 = (TextView) findViewById(R.id.textView22);多加了一个TextView 影响这么大。。。新手伤不起啊
大约 2 年之前 回复

一看到空指针,那就看对象是否实例化,是否为null

看下是不是没有初始化

楼上的都是正解,还有就是,如果发送的过程退出该页面也有可能引发空指针

这代码写的有我往年的风范。有一点救。你要不在每个点前面都判断下是否为空。再调用方法

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android安卓handler报空指针错
有2个按钮 一个是扫描一个查询 按扫描可以扫描二维码(二维码包含json信息)然后解析后显示在二维码信息那里 然后点查询 把二维码所含的json信息发送出去 得到返回值显示在返回信息那里 如果我只做查询 解析结果可以正常显示 如果我再点查询就会报一个空指针 说我解析那一步错 如果我不做解析 那发送也正常 有没有大神帮我看看为什么 错误信息 Process: com.abc.smartpos.cash, PID: 25086 java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at com.abc.smartpos.cash.ScanQR.parseJSONWithGSONForQR(ScanQR.java:138) at com.abc.smartpos.cash.ScanQR$4.handleMessage(ScanQR.java:127) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 我的代码 ``` String orderresult; Handler handler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); orderresult=msg.getData().getString("msg"); //单独执行parseJSONWithGSONForQR()正常显示,继续执行查询操作这里报空指针 parseJSONWithGSONForQR(orderresult); responseinfo.setText(msg.getData().getString("JSON")); } }; //解析扫描得到的JSON数据后设置textview public void parseJSONWithGSONForQR(String jsonData) { String showorder; Gson gson = new Gson(); List<TransPack> transPackList = gson.fromJson(jsonData, new TypeToken<List<TransPack>>() { }.getType()); for (TransPack transPack : transPackList) { showorder="订单号:"+transPack.getId().toString()+"\n"+"意向金:"+transPack.getIntention().toString()+"\n"+"进度款:"+transPack.getProgress().toString()+"\n"+"设计费:"+transPack.getDesign().toString(); orderinfo.setText(showorder); } } //开启新线程 public void queryOrder(){ new Thread(){ public void run(){ postJson(); } }.start(); } //发送JSON并得到返回值,用handler发送 public String responseJSON; public static final String TAG="ScanQR"; public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8"); public void postJson(){ OkHttpClient okHttpClient=new OkHttpClient(); RequestBody requestBody=RequestBody.create(JSON,orderresult); Request request=new Request.Builder() .url("http://api.jisuapi.com/iqa/query") .post(requestBody) .build(); try{ Response response=okHttpClient.newCall(request).execute(); if(response.isSuccessful()){ Log.i(TAG,response.body().string()); responseJSON=response.toString(); Message msg=new Message(); msg.getData().putString("JSON",responseJSON); handler.sendMessage(msg); } }catch (IOException e){ e.printStackTrace(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201712/31/1514704455_550345.jpg)
android 6.0 TextView textIsSelectable BUG
不知道是不是android6.0的bug, 在我环境上100%可以重现: 先说环境: API 23 手机Nexus5 android版本6.0 先设置TextView 的textIsSelectable="true", 然后setMovementMethod 此时长按文本, 等到选择文本的ActionMode弹出来, 然后单击两个指针中间选中的高亮文本, 报如下错误: ``` Invalid offset: -1. Valid range is [0, xx(数字)] java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 69] at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380) at android.text.method.WordIterator.isBoundary(WordIterator.java:101) at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4260) at android.widget.Editor$HandleView.updatePosition(Editor.java:3708) at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2507) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) ``` 异常并没有上报到自己写的代码, baidu和蹩脚的bing搜了一把貌似没人遇到这个问题. 顺便吐个槽现在墙的越来越厉害了, SO用了google站上的jQuery只能看不能登录了... 简单的测试代码: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/txtview" android:layout_width="match_parent" android:layout_height="wrap_content" android:textIsSelectable="true" /> </RelativeLayout> ``` ``` public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textview); SpannableString ss = new SpannableString("哈哈哈哈哈哈哈哈"); ss.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, "onclick", Toast.LENGTH_SHORT).show(); } }, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ss); textView.setMovementMethod(LinkMovementMethod.getInstance()); } } ```
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)
android程序,报空指针,自己陷入思维僵局了。谁来看看,应该不难。
android程序,这个界面显示的是手机联系人,在我们平台注册过的联系人显示在最前面。这是adapter中的代码,我感觉逻辑没什么问题,但是在把mList中的几个数据显示完后,在显示非注册用户的时候报了空指针。 Contact是个bean,mList是注册过的手机联系人,list是所有的手机联系人。我要让注册过的显示在列表最上面。viewHolder.tv_name.setText(contact.getName()); 这句报了空指针。 public View getView(int position, View convertView, ViewGroup parent) { final Contact contact ; ViewHolder viewHolder ; if (convertView == null) { viewHolder = new ViewHolder() ; convertView = LayoutInflater.from(activity).inflate( R.layout.item_addphone_contact, null); viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); viewHolder. tv_state = (FriendStateBtn) convertView.findViewById(R.id.tv_add); viewHolder.tv_phone = (TextView) convertView.findViewById(R.id.tv_phone); viewHolder.user_image = (ImageView) convertView .findViewById(R.id.user_image); viewHolder.sort_key_layout = (RelativeLayout) convertView .findViewById(R.id.sort_key_layout); viewHolder.sort_key = (TextView) convertView.findViewById(R.id.sort_key_item); viewHolder.tv_state.setOnClickListener(null); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } if(position < mList.size()){ //显示注册过的联系人 contact = getContact(mList.get(position).getMember_phone()); if (contact!=null) { list.remove(contact); notifyDataSetChanged(); } }else{ contact = list.get(position-mList.size()); } //在mList中的数据取完后,在取list数据时报了空指针 viewHolder.tv_name.setText(contact.getName()); viewHolder.tv_phone.setText(contact.getNumber().replace(" ", "")); if(position<mList.size()){ if (mList.get(position).getIsFriend().equals("1")) { viewHolder.tv_state.setText("已是好友"); viewHolder.tv_state.setState(FriendStateBtn.State.added); } else { viewHolder.tv_state.setText("添加"); viewHolder.tv_state.setState(FriendStateBtn.State.add); contact.setMember_id(mList.get(position).getMember_id()); } }else { viewHolder.tv_state.setText("邀请"); viewHolder.tv_state.setState(FriendStateBtn.State.invent); } viewHolder.tv_state.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (TextUtils.isEmpty(contact.getMember_id())) { Tools.sendSMS(activity, contact.getNumber().replace(" ", ""), ""); } else { initHttp(contact); } } }); int section = indexer.getSectionForPosition(position); if(position == indexer.getPositionForSection(section)){ viewHolder.sort_key.setText(contact.getSortKey()); viewHolder.sort_key_layout.setVisibility(View.VISIBLE); }else{ viewHolder.sort_key_layout.setVisibility(View.GONE); } return convertView; } private Contact getContact(String member){ for(int i=0;i<list.size();i++){ String number = list.get(i).getNumber().replace("+86","").replace("-",""); if(member.equals(number)){ return list.get(i); } } return null; }
安卓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)
android 传递给service数据空指针问题
74行出错 ,nullpointException,帮我解答感激不尽,我想把这个数据传给service public class pdrActivity extends Activity implements View.OnClickListener{ private Button wifi_btn,pdr_btn,photo_btn,other_btn; EditText ed1,ed2,ed3; TextView txt1,txt2,txt3,txt4,txt5; Button startBtn,stopBtn; Spinner spinner; pdrService myservice; pdrService.myBind mybind; float[] sendmessage=new float[3]; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pdr); ed1=(EditText)findViewById(R.id.ed1_pdr); ed2=(EditText)findViewById(R.id.ed2_pdr); ed3=(EditText)findViewById(R.id.ed3_pdr); txt1=(TextView)findViewById(R.id.txt1_pdr); txt2=(TextView)findViewById(R.id.txt2_pdr); txt3=(TextView)findViewById(R.id.txt3_pdr); txt4=(TextView)findViewById(R.id.txt4_pdr); txt5=(TextView)findViewById(R.id.txt5_pdr); spinner=(Spinner)findViewById(R.id.spin_pdr); startBtn=(Button)findViewById(R.id.start_pdr); stopBtn=(Button)findViewById(R.id.stop_pdr); wifi_btn=(Button)findViewById(R.id.btn1_main); photo_btn=(Button)findViewById(R.id.btn3_main); other_btn=(Button)findViewById(R.id.btn4_main); startBtn.setOnClickListener(this); stopBtn.setOnClickListener(this); handler=new Handler(); setData(); // wifi_btn.setOnClickListener(this); // photo_btn.setOnClickListener(this); // other_btn.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.start_pdr: Intent intent=new Intent(this,pdrService.class); bindService(intent,conn,BIND_AUTO_CREATE); handler.postDelayed(runnable,20000); mybind.setData(sendmessage); //error line break; case R.id.stop_pdr: if (myservice.serviceState=="onBind"){ Toast.makeText(this,"service关闭关闭关闭关闭",Toast.LENGTH_SHORT).show(); unbindService(conn); } } } private ServiceConnection conn=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.print("service 连接"); mybind=(pdrService.myBind)service; myservice=mybind.getService(); } @Override public void onServiceDisconnected(ComponentName name) { } }; public void setData(){ sendmessage[0]=1; sendmessage[1]=1; sendmessage[2]=1; } Runnable runnable=new Runnable() { @Override public void run() { float[] inf=mybind.getInf(); if(inf==null){ Toast.makeText(pdrActivity.this,"空数据",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(pdrActivity.this,"非空数据",Toast.LENGTH_SHORT).show(); } txt1.setText(String.valueOf(inf[0])); txt2.setText(String.valueOf(inf[1])); txt3.setText(String.valueOf(inf[2])); txt4.setText(String.valueOf(inf[3])); txt5.setText(String.valueOf(inf[4])); handler.postDelayed(this,20000); } }; } 下面的是我的service public class pdrService extends Service implements SensorEventListener{ float[] inf=new float[5]; float[] infmation={0,0,0}; dataExchange dataexchange; private myBind mybind=new myBind(); public static String serviceState=""; proceedThread thread; @Override public void onCreate() { super.onCreate(); if (infmation!=null){ inf[0]=1; inf[1]=1; inf[2]=1; } else{ inf[0]=2; inf[1]=2; inf[2]=2; } thread=new proceedThread(); thread.start(); } @Nullable @Override public IBinder onBind(Intent intent) { serviceState="onBind"; return mybind; } public class myBind extends Binder { public float[] getInf(){ return inf; } public pdrService getService(){ return pdrService.this; } public void setData(float[] data){ pdrService.this.infmation=data; } } private class proceedThread extends Thread{ public Handler myHandler; public void run(){ Looper.prepare(); myHandler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==1){ inf[0]+=1; inf[1]+=1; inf[2]+=1; inf[3]+=1; inf[4]+=1; } } }; Looper.loop(); } } @Override public void onSensorChanged(SensorEvent event) { } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void dataListener(dataExchange listener){ this.dataexchange=listener; } }
android listview 报错 空指针
这问题 困扰了我3天了 不知道为什么 求大神指点 上代码 这是onCreate里面的 // 商品 listview lv_friend=(ListView) findViewById(R.id.LV_store); adapter=new Myadapter(this, getdatas()); System.out.println("adapter+++++++++++"+adapter); lv_friend.setAdapter(adapter); } private List<GetDataType> getdatas() { List<GetDataType> list=new ArrayList<GetDataType>(); GetDataType data1=new GetDataType(); data1.setIv_portrait(R.drawable.ic_launcher); data1.setName("杨幂"); data1.setSignature("喜欢我就来找我啊"); list.add(data1); GetDataType data2=new GetDataType(); data2.setIv_portrait(R.drawable.ic_launcher); data2.setName("范冰冰"); data2.setSignature("我在这里等你哦"); list.add(data2); GetDataType data3=new GetDataType(); data3.setIv_portrait(R.drawable.ic_launcher); data3.setName("唐嫣"); data3.setSignature("来追我呀,呵呵"); list.add(data3); GetDataType data4=new GetDataType(); data4.setIv_portrait(R.drawable.ic_launcher); data4.setName("李小璐"); data4.setSignature("386562,加我好友呀"); list.add(data4); GetDataType data5=new GetDataType(); data5.setIv_portrait(R.drawable.ic_launcher); data5.setName("柳岩"); data5.setSignature("帅哥,过来一下"); list.add(data5); return list; } 这是Myadapter package com.android.workapp; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class Myadapter extends BaseAdapter{ private List<GetDataType> mData; private Context mcontext; private int mid; public Myadapter(Context context,List data){ this.mcontext=context; this.mData=data; } //获取列表列的数量 @Override public int getCount() { return mData.size(); } //根据postion获取item的数据 @Override public Object getItem(int position) { return mData.get(position); } //获取position对应的id @Override public long getItemId(int position) { return position; } //创建item的视图 @Override public View getView(int position, View convertView, ViewGroup parent) { View view=View.inflate(mcontext, R.layout.saver_tickey_store_item, null); //获取item对应的数据对象 GetDataType getdata=mData.get(position); //初始化view ImageView iv_portrait= (ImageView) view.findViewById(R.id.IV_portrait); TextView txt_name=(TextView) view.findViewById(R.id.txt_name); TextView signature=(TextView) view.findViewById(R.id.signature); //邦定数据到view iv_portrait.setImageResource(getdata.getIv_portrait()); txt_name.setText(getdata.getName()); signature.setText(getdata.getSignature()); return view; } } GetDataType package com.android.workapp; public class GetDataType { private int iv_portrait; private String name; private String signature; public int getIv_portrait() { return iv_portrait; } public void setIv_portrait(int iv_portrait) { this.iv_portrait = iv_portrait; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSignature() { return signature; } public void setSignature(String signature) { this.signature = signature; } } ![图片说明](https://img-ask.csdn.net/upload/201601/25/1453724110_137295.png)
增加个context变量就报空指针异常
这个代码我是复制网上一位博客的,只不过在他的基础上增加个context,目的是想显示 Toast这个东西,但崩溃了,怎么改?新手不懂 ![图片说明](https://img-ask.csdn.net/upload/201702/17/1487280676_887989.png) ![图片说明](https://img-ask.csdn.net/upload/201702/17/1487280727_591317.jpg) EventHandler.java ``` package com.mytest.handlertest; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; import android.widget.Toast; class EventHandler extends Handler { private NoLooperThread noLooperThread; private OwnLooperThread ownLooperThread; private TextView tv; private Context context; public EventHandler(Looper looper) { super(looper); } public EventHandler() { super(); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.e("EventHandler", "当前线程id:------+>"+Thread.currentThread().getId()); Toast.makeText(context, "当前线程id:------+>"+Thread.currentThread().getId(), Toast.LENGTH_SHORT).show(); //可以根据msg.what执行不同的处理,这里没有这么做 switch(msg.what){ case 1: tv.setText((String)msg.obj); break; case 2: tv.setText((String)msg.obj); noLooperThread.stop(); break; case 3: //不能在非主线程的线程里面更新UI,所以这里通过Log打印收到的消息 Log.e("EventHandler", (String)msg.obj); ownLooperThread.stop(); break; default: //不能在非主线程的线程里面更新UI,所以这里通过Log打印收到的消息 Log.e("EventHandler", (String)msg.obj); break; } } } ``` HandlerTest.java ``` package com.mytest.handlertest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class HandlerTest extends Activity implements OnClickListener { private Button btn1,btn2,btn3,btn4,btn5,btn6; private boolean postRunnable; private EventHandler mHandler; private NoLooperThread noLooperThread; private OwnLooperThread ownLooperThread; private Handler mOtherThreadHandler; private TextView tv; private ReceiveMessageThread receiveMessageThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler_test); btn1=(Button)findViewById(R.id.b101); btn2=(Button)findViewById(R.id.b102); btn3=(Button)findViewById(R.id.b103); btn4=(Button)findViewById(R.id.b104); btn5=(Button)findViewById(R.id.b105); btn6=(Button)findViewById(R.id.b106); btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); btn4.setOnClickListener(this); btn5.setOnClickListener(this); btn6.setOnClickListener(this); receiveMessageThread=new ReceiveMessageThread(); receiveMessageThread.start(); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.b101: //主线程发送消息给自己 Looper looper; looper = Looper.myLooper(); //get the Main looper related with the main thread //如果不给任何参数的话会用当前线程对应的Looper(这里就是Main Looper)为Handler里面的成员mLooper赋值 mHandler = new EventHandler(looper); //mHandler = new EventHandler(); // 清除整个MessageQueue里的消息 mHandler.removeMessages(0); String obj = "This main thread's message and received by itself!"; //得到Message对象 Message m = mHandler.obtainMessage(1, 1, 1, obj); // 将Message对象送入到main thread的MessageQueue里面 mHandler.sendMessage(m); break; case R.id.b102: //other线程发送消息给主线程 postRunnable = false; noLooperThread = new NoLooperThread(); noLooperThread.start(); break; case R.id.b103: //other thread获取它自己发送的消息 tv.setText("please look at the error level log for other thread received message"); ownLooperThread = new OwnLooperThread(); ownLooperThread.start(); break; case R.id.b104: //other thread通过Post Runnable方式发送消息给主线程 postRunnable = true; noLooperThread = new NoLooperThread(); noLooperThread.start(); break; case R.id.b105: //主线程发送消息给other thread if(null!=mOtherThreadHandler){ tv.setText("please look at the error level log for other thread received message from main thread"); String msgObj = "message from mainThread"; Message mainThreadMsg = mOtherThreadHandler.obtainMessage(1, 1, 1, msgObj); mOtherThreadHandler.sendMessage(mainThreadMsg); } break; case R.id.b106: finish(); break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.handler_test, 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); } } ``` NoLooperThread.java ``` package com.mytest.handlertest; import android.content.Context; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; import android.widget.Toast; class NoLooperThread extends Thread{ private Context context; private TextView tv; private boolean postRunnable; private EventHandler mNoLooperThreadHandler; public void run() { Looper myLooper, mainLooper; myLooper = Looper.myLooper(); mainLooper = Looper.getMainLooper(); //这是一个static函数 String obj; if(myLooper == null){ mNoLooperThreadHandler = new EventHandler(mainLooper); obj = "NoLooperThread has no looper and handleMessage function executed in main thread!"; } else { mNoLooperThreadHandler = new EventHandler(myLooper); obj = "This is from NoLooperThread self and handleMessage function executed in NoLooperThread!"; } Toast.makeText(context, obj, Toast.LENGTH_SHORT).show(); mNoLooperThreadHandler.removeMessages(0); if(false == postRunnable){ //send message to main thread Message m = mNoLooperThreadHandler.obtainMessage(2, 1, 1, obj); mNoLooperThreadHandler.sendMessage(m); Log.e("NoLooperThread", "NoLooperThread id:" + this.getId()); }else{ //下面new出来的实现了Runnable接口的对象中run函数是在Main Thread中执行,不是在NoLooperThread中执行 //注意Runnable是一个接口,它里面的run函数被执行时不会再新建一个线程 //您可以在run上加断点然后在eclipse调试中看它在哪个线程中执行 mNoLooperThreadHandler.post(new Runnable(){ @Override public void run() { tv.setText("update UI through handler post runnalbe mechanism!"); // noLooerThread.stop(); } }); } } } ``` OwnLooperThread.java ``` package com.mytest.handlertest; import android.content.Context; import android.os.Looper; import android.os.Message; import android.widget.Toast; class OwnLooperThread extends Thread{ private Context context; private EventHandler mOwnLooperThreadHandler; public void run() { Looper.prepare(); Looper myLooper, mainLooper; myLooper = Looper.myLooper(); mainLooper = Looper.getMainLooper(); //这是一个static函数 String obj; if(myLooper == null){ mOwnLooperThreadHandler = new EventHandler(mainLooper); obj = "OwnLooperThread has no looper and handleMessage function executed in main thread!"; } else { mOwnLooperThreadHandler = new EventHandler(myLooper); obj = "This is from OwnLooperThread self and handleMessage function executed in NoLooperThread!"; } Toast.makeText(context, obj, Toast.LENGTH_SHORT).show(); mOwnLooperThreadHandler.removeMessages(0); //给自己发送消息 Message m = mOwnLooperThreadHandler.obtainMessage(3, 1, 1, obj); mOwnLooperThreadHandler.sendMessage(m); Looper.loop(); } } ``` ReceiveMessageThread.java ``` package com.mytest.handlertest; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.Toast; class ReceiveMessageThread extends Thread{ private Handler mOtherThreadHandler; private Context context; public void run() { Looper.prepare(); mOtherThreadHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.e("ReceiveMessageThread", (String)msg.obj); Log.e("ReceiveMessageThread","当前线程id:----+>"+Thread.currentThread().getId()); Toast.makeText(context, "当前线程id:----+>"+Thread.currentThread().getId(), Toast.LENGTH_SHORT).show(); } }; Looper.loop(); } } ```
Android中空指针异常的具体错误改正
import java.sql.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ImageView zy, ZyImge; private TextView ZyLine, ZyLeade, ZyAb; private String url; private SimpleAdapter adapter; private DBUtil dbUtil; protected static final int MSG_OK = 0; private ListView lv = null; //private MyAdapter myAdapter = null; private List<Card> list = new ArrayList<Card>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.adapter_item); zy = (ImageView) findViewById(R.id.zhengyou_list_img); ZyImge = (ImageView) findViewById(R.id.zhengyou_list_luxian); ZyLeade = (TextView) findViewById(R.id.zhengyou_list_name); ZyLine = (TextView) findViewById(R.id.zhengyou_list_title); ZyAb = (TextView) findViewById(R.id.zhengyou_list_time); final String ZyLines = getIntent().getExtras().getString("ZyLines"); final String ZyImage = getIntent().getExtras().getString("ZyImage"); final String ZyLeader = getIntent().getExtras().getString("ZyLeader"); final String ZyAbs = getIntent().getExtras().getString("ZyAbs"); ZyLine.setText(ZyLines); ZyLeade.setText(ZyLeader); ZyAb.setText(ZyAbs); } } logcat中错误提示: Caused by: java.lang.NullPointerException 07-24 09:00:34.209: E/AndroidRuntime(9339): at com.example.lianwang.MainActivity.onCreate(MainActivity.java:55) 07-24 09:00:34.209: E/AndroidRuntime(9339): at android.app.Activity.performCreate(Activity.java:5122) 07-24 09:00:34.209: E/AndroidRuntime(9339): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 07-24 09:00:34.209: E/AndroidRuntime(9339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 我想问如何改正,错误的原因是什么
Android自定义控件中为Button设置自定义监听器出现空指针。
Android自定义TopBar中给ImageButton设置自定义点击监听器,当点击ImageButton时在listener处出现NullPointerException。 会出错的地方我在后面写了//TODO 。 请问为什么会出现listener没有被实例化的情况? 还有为什么在MainActivity中使用findViewById实例化TopBar也会出现不能实例化控件的情况? IDE : Android Studio ; Compile Sdk Version : API 23 ; Build Tool Version : 23.0.1 ; Min Sdk Version : API 15 ; Target Sdk Version : API 19 ; 部分代码: #MainActivity.java ``` public class MainActivity extends AppCompatActivity { private TopBar topBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // topBar = (TopBar) findViewById(R.id.topBar); //TODO 这样无法实例化topBar ??? topBar = new TopBar(getApplicationContext(), null); if (topBar == null) { Toast.makeText(MainActivity.this, "NULL", Toast.LENGTH_SHORT).show(); } topBar.setOnTopBarClickListener(new TopBar.OnClickListener() { @Override public void onLeftButtonClick() { Toast.makeText(MainActivity.this, "Left", Toast.LENGTH_SHORT).show(); } @Override public void onRightButtonClick() { Toast.makeText(MainActivity.this, "Right", Toast.LENGTH_SHORT).show(); } }); } } ``` #TopBar.java ``` public class TopBar extends RelativeLayout { private ImageButton ibtLeft; private ImageButton ibtRight; private TextView tvTitle; private OnClickListener listener; public interface OnClickListener { void onLeftButtonClick(); void onRightButtonClick(); } public void setOnTopBarClickListener(OnClickListener listener) { this.listener = listener; } public TopBar(Context context, AttributeSet attrs) { super(context); LayoutInflater.from(context).inflate(R.layout.layout_top_bar, this); ibtLeft = (ImageButton) findViewById(R.id.ibt_left); ibtRight = (ImageButton) findViewById(R.id.ibt_right); tvTitle = (TextView) findViewById(R.id.tv_title); ibtLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "leftButton", Toast.LENGTH_SHORT).show(); //Toast可以显示 // listener.onLeftButtonClick(); //TODO NullPointerException 为什么没有实例化listener? } }); ibtRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onRightButtonClick(); //TODO NullPointerException } }); } } ``` #logcat输出 ``` 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: FATAL EXCEPTION: main 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: java.lang.NullPointerException 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.vder.puzzlegame.ui.TopBar$2.onClick(TopBar.java:55) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.view.View.performClick(View.java:4204) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:17355) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:725) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5041) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) ```
求助大神!android的baseadapter老是报空指针
package com.example.kaoqin; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.ObjectUtils.Null; import android.R.integer; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class User_TiaoZhuan_Activity2 extends Activity { private ListView list; private SimpleAdapter SAda; public String huoquuser; private String[] From = new String[]{"yonghu","kaishi","jieshu","zong","yuanyin","zhuangtai","id"}; public ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); private ArrayList<ItemBean> datalist = new ArrayList<ItemBean>(); public String NAME; public String START; public String END; public String SUM; public String REASON; public String STATE; public String ID; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.user_tiaozhuan_activity2); list = (ListView)findViewById(R.id.listViewuser); Intent intent = getIntent();//将检索出来的intent赋值给一个Intent类型的变量intent,getIntent()方法用于直接返回Intent实例 Bundle bundle = intent.getExtras();///获取前面的那个activity传过来的数据 huoquuser = bundle.getString("username"); HttpClien httpClien = new HttpClien(); data = httpClien.HTTPLeaveListView(huoquuser, "2"); //SAda = new SimpleAdapter(User_TiaoZhuan_Activity2.this, getdata(data),R.layout.user_tiaozhuan_buju2, From,new int[]{R.id.tiaozhuan_user2, //R.id.tiaozhuan_start2,R.id.tiaozhuan_end2,R.id.tiaozhuan_sum2,R.id.tiaozhuan_reason2,R.id.tiaozhuan_shenhe2,R.id.tiaozhuan_id2}); //list.setAdapter(SAda); Edit nihao = new Edit(this, getdata(data));//把数据源放入baseadapter list.setAdapter(nihao); } public ArrayList<ItemBean> getdata(ArrayList<HashMap<String,Object>> shuju) { for (int i = 0; i < data.size(); i++) { NAME = String.valueOf(shuju.get(i).get("name")); START = String.valueOf(shuju.get(i).get("start")); END = String.valueOf(shuju.get(i).get("end")); SUM = String.valueOf(shuju.get(i).get("sum")); REASON = String.valueOf(shuju.get(i).get("reason")); STATE = String.valueOf(shuju.get(i).get("state")); ID = String.valueOf(shuju.get(i).get("id")); ItemBean it = new ItemBean(NAME, START, END, SUM, REASON, STATE,ID); datalist.add(it); } return datalist; } } class Edit extends BaseAdapter { private Context context; private ArrayList<ItemBean> list; private LayoutInflater miInflater; public Edit(Context context,ArrayList<ItemBean> list) { LayoutInflater miInflater; miInflater = LayoutInflater.from(context); this.context = context; this.list = list; //根据context上下文加载布局,这里的是User_TiaoZhuan_Activity本身,即this } @Override public int getCount() { // TODO Auto-generated method stub //在此适配器中所代表的数据集中的条目数 return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub //获取数据集中与指定索引对应的数据项 return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub //获取在列表中与指定索引对应的行id return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder kongjian = null; if(convertView == null) { convertView = miInflater.inflate(R.layout.user_tiaozhuan_buju2, null); kongjian = new ViewHolder(); kongjian.TV_sure = (TextView)convertView.findViewById(R.id.yunxu); kongjian.TV_cancel = (TextView)convertView.findViewById(R.id.bohui); kongjian.TVuser = (TextView)convertView.findViewById(R.id.tiaozhuan_user2); kongjian.TVstart = (TextView)convertView.findViewById(R.id.tiaozhuan_start2); kongjian.TVend = (TextView)convertView.findViewById(R.id.tiaozhuan_end2); kongjian.TVsum = (TextView)convertView.findViewById(R.id.tiaozhuan_sum2); kongjian.TVreason = (TextView)convertView.findViewById(R.id.tiaozhuan_reason2); kongjian.TVstate = (TextView)convertView.findViewById(R.id.tiaozhuan_shenhe2); kongjian.TVid = (TextView)convertView.findViewById(R.id.tiaozhuan_id2); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag convertView.setTag(kongjian); }else { kongjian = (ViewHolder)convertView.getTag(); } kongjian.TV_sure.setText("允许请假"); kongjian.TV_cancel.setText("驳回请假"); ItemBean bean = list.get(position); kongjian.TVuser.setText(bean.Itemuser);; kongjian.TVstart.setText(bean.Itemstarttime); kongjian.TVend.setText(bean.Itemendtime); kongjian.TVsum.setText(bean.Itemsumtime); kongjian.TVreason.setText(bean.Itemreason); kongjian.TVstate.setText(bean.Itemstate); kongjian.TVid.setText(bean.ItemId); kongjian.TV_sure.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("通过"); } }); kongjian.TV_cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("不通过"); } }); return convertView; } } class ViewHolder { TextView TV_sure; TextView TV_cancel; TextView TVuser; TextView TVstart; TextView TVend; TextView TVsum; TextView TVreason; TextView TVid; TextView TVstate; } class ItemBean { public String Itemuser; public String Itemstarttime; public String Itemendtime; public String Itemsumtime; public String Itemreason; public String Itemstate; public String ItemId; public ItemBean(String a,String b,String c, String d,String e,String f,String g) { Itemuser = a; Itemstarttime = b; Itemendtime = c; Itemsumtime = d; Itemreason = e; Itemstate = f; ItemId = g; } }![图片说明](https://img-ask.csdn.net/upload/201611/10/1478771417_684227.png) 错误显示的是121行存在空指针,inflate里的布局文件是存在的啊,R类里也有 地址啊(R.layout.user_tiaozhuan_buju2, null);
android gridview 空指针
vh.imageViewvh.setImageResource(getItem(i).dataicon);//这两句提示有空指针 vh.textViewvh.setText(getItem(i).dataName); package com.zhangyi.zyapp26_27; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewSwitcher; import java.util.ArrayList; /** * Created by me on 2016-11-3. */ public class BViewSwitcher extends Activity { public static final int NUMBER_PER_SCREEN = 12; public static class DataItem{ public String dataName; public int dataicon; } static class ViewHolder{ ImageView imageViewvh; TextView textViewvh; } private ArrayList<DataItem> items = new ArrayList<>(); private int screenNo = 1; private int screenCount; ViewSwitcher myviewswitcher; LayoutInflater inflater; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b_viewswitcher); inflater = LayoutInflater.from(BViewSwitcher.this); for (int i = 0; i < 40; i++) { String dataname =""; int drawable =0; DataItem item=new DataItem(); switch ((int) (Math.random() * 3)) { case 0:dataname="Chrome "+i;drawable = R.mipmap.ic_launcher2;break; case 1:dataname="Picture "+i;drawable = R.mipmap.ic_launcher3;break; case 2:dataname="Shop "+i;drawable = R.mipmap.ic_launcher4;break; } item.dataName = dataname; item.dataicon = drawable; items.add(item); } screenCount = items.size() % NUMBER_PER_SCREEN == 0 ? items.size() / NUMBER_PER_SCREEN : items.size() / NUMBER_PER_SCREEN + 1; myviewswitcher = (ViewSwitcher) findViewById(R.id.myviewswitcher); myviewswitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { return inflater.inflate(R.layout.datagridview, null); } }); next(null); } public void previous(View view) { if (screenNo > 1) { screenNo--; myviewswitcher.setInAnimation(this, R.anim.push_left_in); ((GridView) myviewswitcher.getNextView()).setAdapter(adapter); myviewswitcher.showPrevious(); } } public void next(View view) { if (screenNo < screenCount) { screenNo++; myviewswitcher.setInAnimation(this, R.anim.push_right_in); ((GridView) myviewswitcher.getNextView()).setAdapter(adapter); myviewswitcher.showNext(); } } private BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { if (screenNo == screenCount && items.size() % NUMBER_PER_SCREEN != 0) { return items.size() % NUMBER_PER_SCREEN; } return NUMBER_PER_SCREEN; } @Override public DataItem getItem(int i) { return items.get((screenNo - 1) * NUMBER_PER_SCREEN + i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { View view1 = view; ViewHolder vh=new ViewHolder(); ViewGroup viewGroup2=(ViewGroup) getLayoutInflater().inflate(R.layout.datagridview, null); vh.imageViewvh = (ImageView) viewGroup2.findViewById(R.id.imagedata); vh.textViewvh = (TextView) viewGroup2.findViewById(R.id.textdata); try { vh.imageViewvh.setImageResource(getItem(i).dataicon);//这两句提示有空指针 vh.textViewvh.setText(getItem(i).dataName); } catch (Exception e) { e.printStackTrace(); } // ViewGroup parent1 = (ViewGroup) vh.imageViewvh.getParent(); // if (parent1 != null) { // parent1.removeAllViews(); // } // // ViewGroup parent11 = (ViewGroup) vh.textViewvh.getParent(); // if (parent11 != null) { // parent11.removeAllViews(); // } // viewGroup2.addView(vh.imageViewvh); // viewGroup2.addView(vh.textViewvh); // if (view1 == null) { // view1 = inflater.inflate(R.layout.datagridview, viewGroup,false); // } // ImageView imageView = (ImageView) viewGroup2.findViewById(R.id.imagedata); // TextView textView = (TextView) viewGroup2.findViewById(R.id.textdata); // try { // // imageView.setImageResource(getItem(i).dataicon); // imageView.setImageResource(R.mipmap.ic_launcher2); // textView.setText(getItem(i).dataName); // }catch (Exception e){ // e.printStackTrace(); // } return viewGroup2; } }; }
求助 小白debug不到是哪空指针了。
public class MainActivity extends Activity { private GraphicalView chart; private Timer timer = new Timer(); private TimerTask task; private Float addY; private String addX; Tool_Sqls mysql = new Tool_Sqls(); String[] xkedu = new String[20] ;//x轴数据缓冲 Float[] ycache = new Float[20]; //private final static int SERISE_NR = 1; //曲线数量 private XYSeries series;//用来清空第一个再加下一个 private XYMultipleSeriesDataset dataset1;//xy轴数据源 private XYMultipleSeriesRenderer render; SimpleDateFormat shijian = new SimpleDateFormat("hh:mm:ss"); Handler handler2; TextView guangzhi2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.guangzhao); //guangzhi2=(TextView)findViewById(R.id.guangzhi2); //制作曲线图 LinearLayout linearLayout = (LinearLayout)findViewById(R.id.guangzhexian); chart = ChartFactory.getLineChartView(this, getdemodataset(), getdemorenderer()); linearLayout.removeAllViews();//先remove再add可以实现统计图更新 linearLayout.addView(chart, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); handler2 = new Handler(){ public void handleMessage(Message msg) { updatechart(); //guangzhi2.setText(String.valueOf(addY)); } }; task = new TimerTask(){ public void run() { Message msg=new Message(); msg.what=200; handler2.sendMessage(msg); } }; timer.schedule(task, 0, 2000); }//oncreate结束 //更新折线图 private void updatechart() { //判断当前点集中到底有多少点,因为屏幕总共只能容纳20个,所以当点数超过20时,长度永远是20 int length=series.getItemCount(); int a=length; if(length>20){ length=20; } // try { // if(guangzhi2.getText().toString()!=null){ // addY = Float.valueOf(guangzhi2.getText().toString());//要不要判断再说 // } // } catch (NumberFormatException e) { // e.printStackTrace(); // } addX=shijian.format(new java.util.Date()); try { mysql.getROID_4("hoestry2","id"); while (mysql.rs.next()) { addY = Float.valueOf(mysql.rs.getFloat("outlet_temperature"));//(float)(Math.random()*10); } mysql.rs.close(); mysql.stmt.close(); mysql.con.close(); } catch (SQLException e) { e.printStackTrace(); } //移除数据集中旧的点集 dataset1.removeSeries(series); if(a<20)//当数据集中不够20个点的时候直接添加就好,因为初始化的时候只有一个点,所以前几次更新的时候直接添加 { series.add(a+1, addY);//第一个参数代表第几个点,要与下面语句中的第一个参数对应 render.addXTextLabel(a+1, addX); xkedu[a]=addX; } else //超过了20个点要去除xcache【0】换成【1】的..... { //将旧的点集中x和y的数值取出来放入backup中,造成曲线向左平移的效果 for(int i =0 ;i<length-1;i++){ ycache[i]=(float) series.getY(i+1); xkedu[i]=xkedu[i+1]; } //点集先清空,为了做成新的点集而准备 series.clear(); //将新产生的点首先加入到点集中,然后在循环体中将坐标变换后的一系列点都重新加入到点集中 for(int k =0 ;k<length-1;k++){ series.add(k+1, ycache[k]); render.addXTextLabel(k+1, xkedu[k]); } xkedu[4]=addX; series.add(20, addY); render.addXTextLabel(20, addX); } //在数据集中添加新的点集 dataset1.addSeries(series); //视图更新,没有这一步,曲线不会呈现动态 chart.invalidate(); } private XYMultipleSeriesRenderer getdemorenderer() { // TODO Auto-generated method stub render = new XYMultipleSeriesRenderer(); render.setChartTitle("三新锅炉温度曲线图"); render.setChartTitleTextSize(20);//设置整个图表标题文字的大小 render.setAxisTitleTextSize(16);//设置轴标题文字的大小 render.setAxesColor(Color.BLACK); render.setXTitle("时间/hh:mm:ss"); render.setYTitle("温度/℃"); render.setLabelsTextSize(16);//设置轴刻度文字的大小 render.setLabelsColor(Color.BLACK); render.setXLabelsColor(Color.BLACK); render.setYLabelsColor(0, Color.BLACK); render.setLegendTextSize(15);//设置图例文字大小 //render.setShowLegend(false);//显示不显示在这里设置,非常完美 XYSeriesRenderer r = new XYSeriesRenderer();//设置颜色和点类型 r.setColor(Color.RED); r.setPointStyle(PointStyle.CIRCLE); r.setFillPoints(true); r.setChartValuesSpacing(3); render.addSeriesRenderer(r); render.setYLabelsAlign(Align.RIGHT);//刻度值相对于刻度的位置 render.setShowGrid(true);//显示网格 render.setYAxisMax(60);//设置y轴的范围 render.setYAxisMin(-10); render.setYLabels(20);//设置Y轴标签数 render.setDisplayChartValues(true);//设置Y轴曲线上的点的数值是否显示,实测当点数密集的时候不会全部显示,会隔一段时间显示 render.setInScroll(true); render.setLabelsTextSize(14); render.setLabelsColor(Color.BLACK); //render.getSeriesRendererAt(0).setDisplayChartValues(true); //显示折线上点的数值 render.setPanEnabled(false,false);//禁止报表的拖动 render.setPointSize(5f);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置) render.setMargins(new int[]{40,40,40,40}); //设置图形四周的留白 render.setMarginsColor(Color.WHITE); render.setXLabels(0);// 取消X坐标的数字zjk,只有自己定义横坐标是才设为此值 return render; } private XYMultipleSeriesDataset getdemodataset() { // TODO Auto-generated method stub dataset1=new XYMultipleSeriesDataset();//xy轴数据源 series = new XYSeries("矿大温度 ");//这个事是显示多条用的,显不显示在上面render设置 //这里相当于初始化,初始化中无需添加数据,因为如果这里添加第一个数据的话, //很容易使第一个数据和定时器中更新的第二个数据的时间间隔不为两秒,所以下面语句屏蔽 //这里可以一次更新五个数据,这样的话相当于开始的时候就把五个数据全部加进去了,但是数据的时间是不准确或者间隔不为二的 //for(int i=0;i<5;i++) //series.add(1, Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新 dataset1.addSeries(series); return dataset1; } public void onDestroy() { //当结束程序时关掉Timer timer.cancel(); super.onDestroy(); } } ``` ```
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) ```
安卓 锁屏/显示或者隐藏虚拟菜单导致侧拉菜单listview的适配报空指针异常
![页面显示](https://img-ask.csdn.net/upload/201603/23/1458698933_705574.png) ![问题出现的地方](https://img-ask.csdn.net/upload/201603/23/1458698965_625915.png) ![xml](https://img-ask.csdn.net/upload/201603/23/1458698998_995980.png) ![list内容](https://img-ask.csdn.net/upload/201603/23/1458699023_205122.png) ![getview](https://img-ask.csdn.net/upload/201603/23/1458699060_320209.png) 框架大致是v4的drawerlayout设置的侧拉菜单,侧拉菜单是listview,主体是头部导航条式的一堆button和下面对应的viewpager。 当进入APP后手机锁屏或者将手机下面的虚拟菜单隐藏或者显示就会报listview的适配里适配的布局属性设置报空指针。手机现在没法截图,我形容下。 getview里对适配的布局设置属性,比如说关联的布局有个textview为t,设置属性t.settext(list.get(posision).gettext()) 设置适配器传递的list就为空没有值了。 补充:直接切换到桌面或者打开其它app再切换回来不会报错,应该是前后台跑不会报错,屏幕显示大小改变和锁屏后打开就会报错...没头脑啊~~~
RecyclerView 的onBindViewHolder出现空指针异常
package com.example.haha.note; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * Created by haha on 2017/9/8. */ public class NotesTitleFragment extends Fragment { private boolean isTwoPane; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view=inflater.inflate(R.layout.notes_title_frag,container,false); RecyclerView noteTitleRecyclerView=(RecyclerView) view.findViewById(R.id.notes_title_recycler_view); LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity()); noteTitleRecyclerView.setLayoutManager(layoutManager); NoteAdapter adapter=new NoteAdapter(getNote()); noteTitleRecyclerView.setAdapter(adapter); return view; } private List<notes> getNote(){ List<notes> notesList=new ArrayList<>(); for(int i=1;i<=50;i++){ notes note=new notes(); note.setTitle("This is title" + i); note.setContent(getRandomLengthContent("This is note content"+i+".")); notesList.add(note); } return notesList; } private String getRandomLengthContent(String content){ Random random=new Random(); int length=random.nextInt(20)+1; StringBuilder builder=new StringBuilder(); for(int i=0;i<length;i++){ builder.append(content); } return builder.toString(); } public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); if(getActivity().findViewById(R.id.notes_content_layout) !=null){ isTwoPane=true; } else isTwoPane=false; } class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.ViewHolder>{ private List<notes> mNoteList; class ViewHolder extends RecyclerView.ViewHolder{ TextView noteTitleText; public ViewHolder(View view){ super(view); noteTitleText=(TextView) view.findViewById(R.id.note_title); } } public NoteAdapter(List<notes> notesList){ mNoteList=notesList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){ View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.notes_item,parent,false); final ViewHolder holder=new ViewHolder(view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { notes note=mNoteList.get(holder.getAdapterPosition()); if(isTwoPane){ NotesContentFragment notesContentFragment=(NotesContentFragment) getFragmentManager().findFragmentById(R.id.notes_content_fragment); notesContentFragment.refresh(note.getTitle(),note.getContent()); }else { notesContentActivity.actionStart(getActivity(),note.getTitle(),note.getContent()); } } }); return holder; } public void onBindViewHolder(ViewHolder holder,int position){ notes note=mNoteList.get(position); holder.noteTitleText.setText(note.getTitle()); } public int getItemCount(){ return mNoteList.size(); } } } 看了很多网上得解决办法还是没解决问题,小白求教
android-空指针异常
Android应用计数c=a+b,一直报nullpointerexception。 代码: public class Kreasi extends Activity { // Inisialisasi private EditText e1; private EditText e2; private Spinner s1; private Button b1; private Button b2; private TextView t1; private TextView t2; private TextView t3; private TextView t4; private TextView t5; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.kreasi); // INISIALISASI VARIABEL e1 = (EditText)findViewById(R.id.isiharga); e1 = (EditText)findViewById(R.id.isilaba); s1 = (Spinner)findViewById(R.id.spin); b1 = (Button)findViewById(R.id.process); b2 = (Button)findViewById(R.id.reset); t1 = (TextView)findViewById(R.id.hMax); t2 = (TextView)findViewById(R.id.angPokok); t3 = (TextView)findViewById(R.id.angSewa); t4 = (TextView)findViewById(R.id.angTotal); b1.setOnClickListener(new OnClickListener(){ int a,b; @Override public void onClick(View v) { hideSoftKeyboard(b1); String aa,bb; aa = e1.getText().toString(); bb = e2.getText().toString(); a = Integer.valueOf(aa); b = Integer.valueOf(bb); int c = (int) (a + b); t1.setText(Integer.toString(c)); } }); } // Menyembunyikan Keyboard public void hideSoftKeyboard(Button btn) { btn.setInputType(0); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(btn.getWindowToken(), 0); } /* // Fungsi saat tombol process ditekan public void tombolprocess(){ b1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { hideSoftKeyboard(b1); aa = e1.getText().toString(); bb = e2.getText().toString(); Toast.makeText(getBaseContext(),"a="+aa +" b=" +bb,Toast.LENGTH_SHORT).show(); } }); } */ }
安卓listview item单击事件跳转空指针问题
两个activity源码, mainactivity: package com.example.newsclient; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.example.gxfi.entity.News; import com.example.gxfi.service.GetXmlAndParse; import android.R.string; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { private List listNews; private ListView list; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case GetXmlAndParse.PARSESUCCWSS: listNews = (List) msg.obj; initData(); break; } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = (ListView) findViewById(R.id.list); GetXmlAndParse getXmlAndParse = new GetXmlAndParse(mHandler); getXmlAndParse.getXml(); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub switch (parent.getId()) { case R.id.list: expressItemClick(position);//position 代表你点的哪一个 break; } } private void expressItemClick(int position) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this,NewsActivity.class); Map<String, String> item = (Map<String, String>) list.getAdapter().getItem(position); String essay = item.get("description"); //添加到intent域中 intent.putExtra("description",essay ); startActivity(intent); finish(); }}); } /** * 将解析后的xml填充到ListView */ protected void initData() { // TODO Auto-generated method stub List items = new ArrayList(); for (News news : (List<News>)listNews) { Map item = new HashMap(); item.put("title", news.getTitle()); item.put("description", news.getDescription()); items.add(item); } SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.news_view, new String[] { "title" }, new int[] { R.id.textView1 }); list.setAdapter(adapter); } } newsactivity: package com.example.newsclient; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class NewsActivity extends Activity { private TextView myTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); String value = intent.getStringExtra("description"); myTextView = (TextView) findViewById(R.id.textview2); // myTextView.setText(value); } } 错误: ![图片说明](https://img-ask.csdn.net/upload/201606/19/1466349934_182376.png)
android开发,在getGroupView导入已有的布局文件出现空指针异常(如图),哪错了
新建relativelayout就可以,使用已有的就不行,一下是布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/group"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tubiao" android:src="@drawable/t1" /> <TextView android:text="hh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/biaoti" android:layout_toRightOf="@+id/tubiao"/> </RelativeLayout>![图片](https://img-ask.csdn.net/upload/201609/29/1475140905_361379.jpg)
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问