android handler 没有接收到消息

从log里面可以看出message是确确实实发送了

但是 上面的handler也没办法执行handlemessage的方法

package czl.baoleme.Fragment;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import czl.baoleme.HttpClient.MyHttpClient;
import czl.baoleme.Other.JSONAnalys;
import czl.baoleme.R;

/**

  • Created by LeoChen on 2017/5/15. */

public class HomePageFragment extends Fragment {
private static final int JSONSTR_MESSAGE=666;
private ListView list;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_homepage,container,false);
    Thread restaurantThread = new Thread(new RestaurantThread());
    restaurantThread.start();

    //问题是这里 这个handlemessage方法里面并没有执行
    //但是message是确确实实发送了
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case JSONSTR_MESSAGE:
                    List<Map<String,Object>> data = (List<Map<String,Object>>)msg.obj;
                    getListView(view,data);
                    break;
                default:
                    break;
            }
        }
    };
    return view;
}


public void getListView(View view,List<Map<String,Object>> data){
    list = (ListView) view.findViewById(R.id.resraurantListView) ;
    SimpleAdapter simpleAdapter = new SimpleAdapter(this.getActivity(), data, R.layout.item_hplistview,
            new String[]{"restaurant_list_item_logo",
                    "restaurant_list_item_name",
                    "restaurant_list_item_score",
                    "restaurant_list_item_distribution",
                    "restaurant_list_item_discount"},
            new int[]{R.id.restaurant_list_item_logo,
                    R.id.restaurant_list_item_name,
                    R.id.restaurant_list_item_score,
                    R.id.restaurant_list_item_distribution,
                    R.id.restaurant_list_item_discount}
    );
    list.setAdapter(simpleAdapter);
    setListViewHeightBasedOnChildren(list);
}

//这个方法是从解析json得到的列表里取出图片url然后请求图片并放入新的列表
public List> getData(String jsonStr){
List> list = JSONAnalys.getJSON(jsonStr);
List> dataList = new ArrayList<>();
for(Map item:list){
Map map = new HashMap<>();

        String url=item.get("reslogo");
        Log.d("url",url);
        Bitmap pic = getImage(url);

        map.put("restaurant_list_item_logo",pic);
        map.put("restaurant_list_item_name",item.get("name"));
        map.put("restaurant_list_item_score","33333");
        map.put("restaurant_list_item_distribution",item.get("jianjie"));
        map.put("restaurant_list_item_discount","55555");
        dataList.add(map);
    }

    return dataList;
}

//请求图片方法
public Bitmap getImage(String url){

    HttpGet get = new HttpGet(url);

    HttpClient client= new DefaultHttpClient();
    Bitmap pic = null;
    try{
        HttpResponse response = client.execute(get);
        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();
        pic = BitmapFactory.decodeStream(is);
    }catch (Exception e){
        e.printStackTrace();
    }
    return pic;
}

//执行网络请求 获取json 最终生成List 并发送List对象
class RestaurantThread implements Runnable{
Handler handler = new Handler();
@Override
public void run() {
MyHttpClient httpClient = new MyHttpClient();
String jsonStr = httpClient.getRestaurant();
List> list = getData(jsonStr);
try{
Message message = new Message();
message.what=JSONSTR_MESSAGE;
message.obj = list;
if(handler.sendMessage(message)){
Log.d("发送列表","成功");
}
}catch(Exception e){
e.printStackTrace();
}

    }
}



public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }

    int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        /**
         * listItem.measure(0,0) will throw a NPE if listItem is a ViewGroup
         * instance
         */
        if (listItem instanceof ViewGroup) {
            listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        }
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    LayoutParams params = listView.getLayoutParams();
    // listView.getDividerHeight()获取子项间分隔符占用的高度
    // params.height最后得到整个ListView完整显示需要的高度
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

}

2个回答

RestaurantThread里面的那个handler和onCreateView里面的handler是两个handler。
建议把handler自定义成一个class,

class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case JSONSTR_MESSAGE:
List> data = (List>)msg.obj;
getListView(view,data);
break;
default:
break;
}
}
}

然后把RestaurantThread里面的handler类型换成MyHandler

handler发送消息的时候会把target设为当前的Handler,你在看你线程里面的handler和oncreateview里面的handler不是同一个对象.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么用handler接收不到list对象
这是错误提示: at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityTh 这是代码: ```private Handler listHandler = new Handler() { public void handleMessage(Message msg) { List<Map<String, String>> result = (List<Map<String, String>>) msg.obj; switch (msg.what) { case AutoListView.REFRESH: lv_wanzheng.onRefreshComplete(); //listCount.clear(); listCount.addAll(result); break; case AutoListView.LOAD: lv_wanzheng.onLoadComplete(); listCount.addAll(result); break; } lv_wanzheng.setResultSize(result.size()); wanzhengAdapter.notifyDataSetChanged(); }; }; new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = whatNum; msg.obj = getData(); listHandler.sendMessage(msg); } }).start(); private List<Map<String, String>> getData() { JsonMessage jm = new JsonMessage(); String[] title = jm.getTitle(); String[] time = jm.getTime(); String[] image1 = jm.getimage1(); String[] image2 = jm.getimage2(); String[] url = jm.getUrl(); List<Map<String, String>> listdata = new ArrayList<Map<String, String>>(); for (int i = 0; i < image1.length; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("title", title[i]); map.put("time", time[i]); map.put("image1", image1[i]); map.put("image2", image2[i]); map.put("url", url[i]); listdata.add(map); } return listdata; } ```
Android中Activity处理Handler消息时,frame-animation会卡顿
项目中要实现一个UI,要有进度滚动的动画以及步骤更新。 进度滚动的动画是采用帧动画的方式实现,步骤更新是采用的Handler机制进行更新。 UI是在主线程中的,在后台的service中调用Activity的handler进行msg发送,在Activity中根据接收到的msg进行步骤的更新处理。 现在的问题是,每次发送msg时,animation都会卡顿一下。开始是怀疑步骤更新的时候,对checkbox打钩影响的,现在把这部分代码注释掉后,同样会卡顿。有没有大神帮忙指导下,非常感谢! Activity中接收msg处理如下: case VdmcMsgHandler.MSG_TYPE_TASK_COMPLETE:{ // checkBox1.setVisibility(1); // checkBox1.setChecked(true); break; } service中发送msg如下: NormalActivity.getInstance().handler.sendMessage(VdmcMsgHandler.MSG_TYPE_TASK_COMPLETE); 动画是放在onWindowFocusChanged中实现的: protected void onCreate(Bundle bundle) { super.onCreate(bundle); Log.i(TAG, "onCreate"); setContentView(R.layout.taskactivity); //check progress animation animationImage = (ImageView)findViewById(R.id.hfaanimationimage); } public void onWindowFocusChanged(boolean hasFocus){ super.onWindowFocusChanged(hasFocus); Log.i(TAG, "onWindowFocusChanged"); animationImage.setImageResource(R.drawable.animation); animationDrawable = (AnimationDrawable) animationImage.getDrawable(); animationDrawable.start(); }
使用 Handler 更新 UI
我实现了一个Android应用程序,,包含四个activity(A,B,C,D) A 调用 B; B调用 C,并且 C调用 D。 Activity A 实现了一个Handler Handler handler=new Handler(){ public void handleMessage(Message msg){ Bundle bundle = new Bundle(); bundle = msg.getData(); String key = bundle.getString("Changed"); if(key.compareTo("NotificationType") == 0){ String completeStr = bundle.getString(key); if(completeStr.compareTo("Message") == 0) { // update UI of Activity A } } } }; Activity D 可以使用handler发送一个信息。 现在的问题是: 当从activity D中发送信息时,如果 Activity A在后台,会发生什么? 通过handler接收信息之前,如果activity A 被毁坏了,会发什么?
Android udp接收不到组播,请问如何解决?
能接收到udp数据,但是接收不到udp组播数据,请各位大神帮帮忙,万分感谢! 代码如下: package ncepu.wsy.udp_multicast_server; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.sql.Date; import java.text.SimpleDateFormat; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiManager; import android.net.wifi.WifiManager.MulticastLock; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.LinearLayout; import android.widget.TextView; @SuppressLint({ "SimpleDateFormat", "HandlerLeak" }) public class MulticastServer extends Activity { private MulticastSocket ms; private static String MulticastHost="238.9.9.1"; private static int PORT = 8302; InetAddress receiveAddress; String result = ""; private MulticastLock multicastLock; LinearLayout layout; String baotou=""; String mingling=""; String minglingleixing=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); allowMulticast(); setContentView(R.layout.activity_main); layout = (LinearLayout) findViewById(R.id.layout); new Thread(){ public void run() { try { ms = new MulticastSocket(PORT); receiveAddress=InetAddress.getByName(MulticastHost); ms.joinGroup(receiveAddress); } catch (Exception e) { e.printStackTrace(); } byte data[] = new byte[512]; DatagramPacket dp = new DatagramPacket(data, 512); while (true) { try { ms.receive(dp); result = new String(data, 0, dp.getLength()); Message msg = new Message(); msg.what = 1; hd.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); } } }; }.start(); } Handler hd = new Handler(){ @SuppressWarnings("unused") @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case 1: SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss"); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); TextView tv =new TextView(MulticastServer.this); tv.setText("result--》"+result); layout.addView(tv); break; } } }; private void allowMulticast() { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); multicastLock = wifiManager.createMulticastLock("multicast.test"); multicastLock.acquire(); } } <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".MainActivity" > </LinearLayout> </ScrollView> <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ncepu.wsy.udp_multicast_server" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="ncepu.wsy.udp_multicast_server.MulticastServer" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
关于handler 信息接收 问题。。。。。
[code="java"] package com.rock; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.AttributeSet; import android.view.View; public class RockActivity extends Activity { /* * 动态图形的绘制基本思路是,创建一个类继承View(或surfaceView)覆盖 * onDraw()方法,使用 Canvas对象在界面上绘制不同的图形,使用invalidate() * 方法刷新界面 。下面是一个弹球实例 运用动态图形绘制基本思路。 */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RockView rockView=new RockView(this, null); setContentView(rockView); } class RockView extends View implements Runnable{ private int x=20,y=20; protected void onDraw(Canvas canvas) { //实例化画笔 Paint paint=new Paint(); //设置画笔颜色 paint.setColor(Color.GREEN); canvas.drawCircle(x, y, 10, paint); super.onDraw(canvas); } public RockView(Context context, AttributeSet attrs) { super(context, attrs); //获得焦点 setFocusable(true); new Thread(this).start(); } /* *E/AndroidRuntime( 4582): java.lang.RuntimeException: * Can't create handler inside thread that has not called Looper.prepare() * * 解决方法之一 在 run()方法 前 加Looper.prepare() 末尾 加Looper.loop(); */ public void run() { Looper.prepare(); RefreshHandler refreshHandler=new RefreshHandler(); while(!(Thread.currentThread().isInterrupted())){ Message msg=new Message(); msg.what=0x101; refreshHandler.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } Looper.loop(); } class RefreshHandler extends Handler{ public void handleMessage(Message msg) { if(msg.what==0x101){ RockView.this.update(); RockView.this.invalidate(); } super.handleMessage(msg); } } private void update(){ int height=getHeight(); y+=5; if(y>=height){ y=20; } } } } [/code] 这个 handler数据可以发送,为什么 接受不了呢? 求指教
请教大家, 为啥handler使用了同一looper, 但是无法获取彼此发出的消息
我在主线程的两个源文件下建立了两个handler实例,让他们都使用mainLooper,想看看它们能不能收到彼此发送的消息,日志显示接受不到. 我的预期使可以收到的啊,代码如下,请熟悉这部分的同学帮忙提点一下,多谢了~ A.java文件的handler部分代码 mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { MainActivity.this.handleMessage(msg); } }; protected void handleMessage(Message msg) { switch (msg.what) { case 1: Log.e("", "接收到1消息"); break; default: break; } } ``` ``` 另一个文件B.java中handler部分的代码 mHandler = new Handler(Looper.getMainLooper); mHandler.sendEmptyMessageDelayed(1, 1000); 目前结果就是B.java中handler发送的索引为1的消失,在A中的handleMessage()中是接收不到的
android使用netty框架与PC服务端通信,接收到内容与发送内容不同
例如PC端发送888,android端却收到888后面还跟着一大串以前测试时候的内容, 部分代码如下,复制时括号有些错乱请勿在意: ``` Bootstrap configureBootstrap(Bootstrap b, EventLoopGroup g) { b.group(g) .channel(NioSocketChannel.class) .remoteAddress(parements.getString("ServerIP", host), parements.getInt("port", port)) // 配置端口 .option(ChannelOption.TCP_NODELAY, true) // .option(ChannelOption.SO_KEEPALIVE, true) // 1 .handler(new ChannelInitializer<SocketChannel>() { //有连接到达时会创建一个channel @Override public void initChannel(SocketChannel ch) throws Exception { //pipeline管理channel中的Handler,在channel队列中添加一个handler来处理业务 ch.pipeline().addLast( new IdleStateHandler(READ_TIMEOUT, 3, 0), decoderHandler, handler); } }); // Log.e("ConnService"," "+b.remoteAddress(parements.getString("ServerIP", // host), parements.getInt("port", port))); return b; } ``` public class UptimeClientHandler extends ChannelDuplexHandler { 。。。。。。 @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { if (startTime < 0) { startTime = System.currentTimeMillis(); } sender = ctx; println("Connected to: " + ctx.channel().remoteAddress()); RequestTools.sTerminal_Request_Online(parements.getInt("nMacID", 0), parements.getInt("pairID", 0)); } @Override public void read(ChannelHandlerContext ctx) throws Exception { // ctx中包含的msg已经和发送内容不同 super.read(ctx); sendOnline(); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { // TODO Auto-generated method stub super.channelReadComplete(ctx); ctx.flush(); } } ``` @Sharable public class BasicCmdDecoder extends MessageToMessageDecoder<ByteBuf> @Override protected void decode(ChannelHandlerContext ctx, ByteBuf buf, //buf接收到的内容与发送内容不同 List<Object> out) throws Exception { synchronized (object) { // TODO Auto-generated method stub msg.writeBytes(buf, 0, buf.writerIndex()); remainLenght = msg.readableBytes(); if(msg.readableBytes()<5){ return; } 略。。。 { ``` android菜鸟,还请大神们帮忙看看
Android蓝牙通讯接收到的数据是一段一段的,不能连起来,什么原因?
编写了一个蓝牙通讯的上位机,和单片机通讯,目前用串口通讯助手测试的时候发现,每次给蓝牙串口发一个大串数据的时候,手机上接收到的总是分段显示 比如我发一个“123456789123456789123456789” 手机上接收到则显示“12345”“67891234”“567891”“23456789”等类似的数据,有时候还会丢数据。。。 这是接收到的数据 我直接输出在LogCat上的显示一段一段的 ![图片说明](https://img-ask.csdn.net/upload/201609/26/1474875151_388275.png) 以下是代码 写了一个线程 线程来 处理 Input数据流 然后用hanler.message把数据发送到handler进行打印或者显示 界面还有一个按钮 开控制线程的开始 ``` //handler处理数据 Handler revhandler = new Handler(){ public void handleMessage(android.os.Message msg) { byte[] writeBuf = (byte[]) msg.obj; String writeMessage = new String(writeBuf,0,msg.arg1); textV.setText(writeMessage); System.out.println("---->>>"+writeMessage); }; }; //接收线程 private class receivethread extends Thread{ private final BluetoothSocket mmSocket; private final InputStream mmInStream; public receivethread(BluetoothSocket socket) { mmSocket = socket; InputStream tmpIn = null; try { tmpIn = socket.getInputStream(); } catch (IOException e) { Log.e(TAG, "temp sockets not created", e); } mmInStream = tmpIn; } @Override public void run() { byte[] buffer = new byte[1024]; int bytes; // TODO 自动生成的方法存根 try { while ((bytes = mmInStream.read(buffer))!=-1) { revhandler.obtainMessage(1, bytes, -1, buffer).sendToTarget(); } } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }} ``` 求各位大神指导!!
Android handleMessage()在OnCreate之后执行?
我的程序需要用子线程向网络获取数据并保存到MainActivity中。代码大概是这样的 ``` public class MainActivity { private Timer timer; public MyHandler handler; private String js; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handler = new MyHandler(); timer = new Timer(); getAllInfo(); //延迟5秒等待getAllInfo(); 如果去掉该语句,数据将不能从网络获取到 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("js = " + js); System.out.println("OnCreate OVER); } //利用计时器,两分钟联网获取一次数据 private void getAllInfo(){ timer.schedule(new java.util.TimerTask(){ @Override public void run() { System.out.println("Id:" + Thread.currentThread().getId()); String data; // 联网获取数据的代码 .... data = ..... // Message msg = Message.obtain(handler, 1 , data); handler.removeMessages(0); msg.sendToTarget(); System.out.println("SEND SUCCEED " + data); } }, 0, 120*1000); } //自定义Handler类 private class MyHandler extends Handler { public MyHandler() { } @Override public void handleMessage(Message msg) { super.handleMessage(msg); System.out.println("handleMessage START"); //更新数据的值   js = msg.obj.toString; System.out.println(js); System.out.println("handleMessage OVER"); } }; } ``` 程序运行后输出结果为: id:617 SEND SUCCEED data(这里data已经是网络上获取到的数据) js = OnCreate OVER handleMessage START data(这里data已经是网络上获取到的数据) handleMessage OVER 可以看到js = ,并没有拿到值 再往下看handleMessage()竟然在OnCreate()执行完毕之后才执行,然后js拿到了值,但是现在拿到已经没用了……OnCreate()已经结束 所以为什么handleMessage()不是接受到 msg.sendToTarget()的消息之后立即执行的呢?这样我的Activity中的js就没法获取到数据显示在界面上了 工期限制,急求大神解答!!
Android socket通讯客户端连不上服务器问题,以及发送消息程序就闪退
原本以为是线程问题但是好像又不是,实在找不到怎么弄了 这是客户端: package com.chiaki.mysocketobject; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatActivity extends AppCompatActivity implements Runnable{ private static final String HOST = "172.16.2.54"; private static final int PORT = 12345; private MsgAdapter adapter; private ListView msgListView; private List<Msg> msgList=new ArrayList<Msg>(); private ImageButton send; private ImageButton connect; private EditText edit; private TextView ctext; private Socket socket; private BufferedReader in = null; private PrintWriter out = null; private String content = ""; private StringBuilder sb = null; public Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x123) { sb.append(content); ctext.setText(sb.toString()); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); adapter=new MsgAdapter(ChatActivity.this,R.layout.chat_list_view,msgList); ImageButton back = (ImageButton)findViewById(R.id.back); ImageButton voiceButton = (ImageButton)findViewById(R.id.voiceButton); connect = (ImageButton)findViewById(R.id.connectButton); send = (ImageButton)findViewById(R.id.send); edit = (EditText)findViewById(R.id.edit); ctext = (TextView)findViewById(R.id.chattext); msgListView=(ListView)findViewById(R.id.msg_list_view); sb = new StringBuilder(); msgListView.setAdapter(adapter); // 点击按钮实例化Socket对象,与服务端进行连接,获取输入输出流 // 连接服务器,要在子线程中 connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { @Override public void run() { super.run(); try { // 创建socket,连接服务器 socket = new Socket(HOST, PORT);//连接服务器 in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));//接收消息的流对象 out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);//发送消息的流对象 } catch (Exception e) { e.printStackTrace(); } } }.start(); } }); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ChatActivity.this,SocketActivity.class); startActivity(intent); } }); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String con=edit.getText().toString(); edit.setText(""); if (socket.isConnected()) { if (!socket.isOutputShutdown()) { out.println(con);//点击按钮发送消息 } } } }); //启动线程,连接服务器,并用死循环守候,接收服务器发送过来的数据 new Thread(ChatActivity.this).start(); } // 重写run方法,在该方法中输入流的读取 public void run() { try { while (true) { //死循环守护,监控服务器发来的消息 if (socket.isConnected()) { //如果服务器没有关闭 if (!socket.isInputShutdown()) { //连接正常 if ((content = in.readLine()) != null) { //如果输入流没有断开 content += "\n"; //读取接收的信息 handler.sendEmptyMessage(0x123); //会发送一个空消息,但是指定了Message的what属性 } } } } } catch (Exception e) { e.printStackTrace(); } } } 这是layout文件主要的控件: <ImageButton //建立连接按钮 android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@android:drawable/checkbox_on_background" android:id="@+id/connectButton" android:layout_alignParentStart="true" android:layout_below="@+id/edit" /> <TextView //显示消息 android:text="TextView" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/chattext" /> <ImageButton //编辑消息 android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@android:drawable/ic_btn_speak_now" android:id="@+id/voiceButton" android:layout_below="@+id/edit" android:layout_centerHorizontal="true" /> <ImageButton //发送消息 android:layout_width="wrap_content" android:layout_height="40dp" app:srcCompat="@android:drawable/ic_menu_send" android:id="@+id/send" android:backgroundTint="?attr/colorButtonNormal" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" /> 这是服务端: import java.io.DataInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { // 定义相关的参数,端口,存储Socket连接的集合,ServerSocket对象 // 以及线程池 private static final int PORT = 12345; private List<Socket> mList = new ArrayList<Socket>(); private ServerSocket server = null; private ExecutorService myExecutorService = null; public static void main(String[] args) { new Server(); } public Server() { try { server = new ServerSocket(PORT); // 创建线程池 myExecutorService = Executors.newCachedThreadPool(); System.out.println("服务端运行中...\n"); Socket client = null; while (true) { client = server.accept(); mList.add(client); myExecutorService.execute(new Service(client)); } } catch (Exception e) { e.printStackTrace(); } } class Service implements Runnable { private Socket socket; private BufferedReader in = null; private String msg = ""; public Service(Socket socket) { this.socket = socket; try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("用户:" + this.socket.getInetAddress() + "~加入了聊天室" + "当前在线人数:" + mList.size()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { while (true) { if ((msg = in.readLine()) != null) { if (msg.equals("bye")) { System.out.println("~~~~~~~~~~~~~"); mList.remove(socket); in.close(); System.out.println("用户:" + socket.getInetAddress() + "退出:" + "当前在线人数:" + mList.size()); socket.close(); break; } else { System.out.println(socket.getInetAddress() + " 说: " + msg); this.sendmsg(); } } } } catch (Exception e) { e.printStackTrace(); } } // 为连接上服务端的每个客户端发送信息 public void sendmsg() { int num = mList.size(); for (int index = 0; index < num; index++) { Socket mSocket = mList.get(index); PrintWriter pout = null; try { pout = new PrintWriter( new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream(), "UTF-8")), true); pout.println(msg); } catch (IOException e) { e.printStackTrace(); } } } } }
android怎么实现蓝牙实时接收数据 inputstream
现在在做一个APP 单片机通过蓝牙模块 将数据发送到手机上并显示 现在搜索蓝牙 配对 连接都没问题 但是做到接收数据这一步的时候遇到了一些问题 首先是 调用inputstream函数的时候 程序会阻塞 (我也看了资料说是放到线程里 但是放进去之后 却不能实时接收了 或者说是不能接收完全) 然后是 我想设置一个 开始接收的按钮 按一下就开始自动接收 再按另一个就停止接收 然后这一部分又怎么实现 有没有大神可以帮我?求助! (我现在用的是Handler线程 用了postdelay方法来掩饰接收更新,然后用了OnTouch检测按钮是否按下 按下就接收 松开就停止)但现在我想换成例如 OnClick的接口 怎么办? 以下是 handler 函数 求大神帮忙! ``` class btnlistener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { // TODO 自动生成的方法存根 if (event.getAction()==MotionEvent.ACTION_DOWN) { System.out.println(message+"I m motion"); revhandler.post(ReciveMsg); } else if (event.getAction() == MotionEvent.ACTION_UP) { revhandler.removeCallbacks(ReciveMsg); } return false; } } Handler revhandler = new Handler(); Runnable ReciveMsg = new Runnable() { public void run() { int i =0; try{ InputStream inputStream = bluetoothSocket.getInputStream(); byte data[]= new byte[5]; while((i=inputStream.read(data))!=-1){ if(inputStream.available()==0){ break; } message = new String(data); System.out.println(message); textV.setText(message); } } catch(IOException e){ e.printStackTrace(); } revhandler.postDelayed(ReciveMsg,200); } }; ```
Android如何在自定义view中发送消息给主线程
求求各位大神支招,小弟在自己开发一个东西,遇到了一个小问题。 ![![图片说明](https://img-ask.csdn.net/upload/201603/15/1458054699_661302.jpg) 图片说明](https://img-ask.csdn.net/upload/201603/15/1458054689_616589.jpg) 我在自定义view的onDraw里,当条件达到后就开启一个子线程发送消息给主线程,让主线程中的handler接收消息并执行相应的动作,可是在Log的输出下只能输出“子线程,”而没有”handlemessage“,并且异常退出,退出代码如下: 03-15 22:50:34.593: W/dalvikvm(27492): threadid=1: thread exiting with uncaught exception (group=0x41c6ece0) 03-15 22:50:34.593: W/dalvikvm(27492): threadid=1: uncaught exception occurred 03-15 22:50:34.593: W/System.err(27492): java.lang.NullPointerException 03-15 22:50:34.593: W/System.err(27492): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4094) 03-15 22:50:34.593: W/System.err(27492): at android.os.Handler.dispatchMessage(Handler.java:110) 03-15 22:50:34.593: W/System.err(27492): at android.os.Looper.loop(Looper.java:193) 03-15 22:50:34.593: W/System.err(27492): at android.app.ActivityThread.main(ActivityThread.java:5348) 03-15 22:50:34.593: W/System.err(27492): at java.lang.reflect.Method.invokeNative(Native Method) 03-15 22:50:34.593: W/System.err(27492): at java.lang.reflect.Method.invoke(Method.java:515) 03-15 22:50:34.593: W/System.err(27492): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 03-15 22:50:34.594: W/System.err(27492): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 03-15 22:50:34.594: W/System.err(27492): at dalvik.system.NativeStart.main(Native Method) 03-15 22:50:34.594: W/dalvikvm(27492): threadid=1: calling UncaughtExceptionHandler 03-15 22:50:34.594: I/dalvikvm(27492): +++ calling Ljava/lang/ThreadGroup;.uncaughtException 03-15 22:50:34.594: D/dalvikvm(27492): threadid=11: bye! 03-15 22:50:34.595: E/AndroidRuntime(27492): FATAL EXCEPTION: main 03-15 22:50:34.595: E/AndroidRuntime(27492): Process: com.example.wyccustomview3, PID: 27492 03-15 22:50:34.595: E/AndroidRuntime(27492): java.lang.NullPointerException 03-15 22:50:34.595: E/AndroidRuntime(27492): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4094) 03-15 22:50:34.595: E/AndroidRuntime(27492): at android.os.Handler.dispatchMessage(Handler.java:110) 03-15 22:50:34.595: E/AndroidRuntime(27492): at android.os.Looper.loop(Looper.java:193) 03-15 22:50:34.595: E/AndroidRuntime(27492): at android.app.ActivityThread.main(ActivityThread.java:5348) 03-15 22:50:34.595: E/AndroidRuntime(27492): at java.lang.reflect.Method.invokeNative(Native Method) 03-15 22:50:34.595: E/AndroidRuntime(27492): at java.lang.reflect.Method.invoke(Method.java:515) 03-15 22:50:34.595: E/AndroidRuntime(27492): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 03-15 22:50:34.595: E/AndroidRuntime(27492): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 03-15 22:50:34.595: E/AndroidRuntime(27492): at dalvik.system.NativeStart.main(Native Method)
安卓,用messenger绑定service,服务的消息发不到客户端,求大神指导
以下是ativity_main.xml: <LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击这里开始绑定service"/> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 以下是服务的java代码: package com.example.test_service_messenger; import android.app.Service; import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.os.IBinder; import android.content.Intent; public class SelfService extends Service { class SelfHandler extends Handler { public void handleMessage(Message msg) { if(msg.what==101) { System.out.println("收到了客户端发来的消息"); Message msgReply=Message.obtain(msg); msgReply.what=102; try{ msg.replyTo.send(msgReply); System.out.println("已发送");} catch(Exception e){ e.printStackTrace(); } } } } Messenger messenger=new Messenger(new SelfHandler()); public IBinder onBind(Intent intent) { return messenger.getBinder(); } } 以下是客户端mainActivity.java的代码: package com.example.test_service_messenger; import android.os.Bundle; import android.widget.*; import android.app.Activity; import android.view.Menu; import android.content.ServiceConnection; import android.os.Binder; import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.view.View; import android.view.View.OnClickListener; import android.content.ComponentName; import android.os.IBinder; import android.content.Intent; import android.content.Context; public class MainActivity extends Activity { Intent intent=new Intent(); Button but=null; TextView textview=null; Messenger messenger=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent.setClass(MainActivity.this,SelfService.class); but=(Button)super.findViewById(R.id.button); textview=(TextView)super.findViewById(R.id.textview); but.setOnClickListener(new OnClickListenerimpl()); } @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; } ServiceConnection connection=new ServiceConnection() { public void onServiceConnected(ComponentName arg1,IBinder binder) { messenger=new Messenger(binder); } public void onServiceDisconnected(ComponentName arg1) { } }; Handler handler=new Handler() { public void handleMessage(Message msg) { if(msg.what==102) { System.out.println("接收到了服务传回来的消息"); MainActivity.this.textview.setText("接收到了服务传回的消息"); } } }; Messenger messenger1 =new Messenger(handler); class OnClickListenerimpl implements OnClickListener { public void onClick(View v) { bindService(intent,connection,Context.BIND_AUTO_CREATE); Message message=Message.obtain(); message.what=101; message.replyTo=messenger; try{messenger.send(message);} catch(Exception e) { e.printStackTrace(); } } } } 以下是logcat: ![图片说明](https://img-ask.csdn.net/upload/201511/26/1448527537_667794.png) 从logcat中可看出,服务已接收到了客户端发来的消息,并已经发回了消息,但是服务那边收不到服务发回来的消息?请问这个应该怎么解决? 另外我还想问问,多个线程或进程间互发消息,线程或进程发消息是怎样设定发往哪里的?又是怎样知道是发给自己的?是广播,然后让what相等的其他线程,进程知道是发给自己的,还是怎样?顺便希望大家能指导指导一下这个问题。
android 三个线程同时给一个线程发消息怎么做
我想要三个线程执行完之后分别 handler.sendEmptyMessage(0123); handler.sendEmptyMessage(0234); handler.sendEmptyMessage(0345); 请问在接收消息的线程相伴多收到这三个消息以后在执行这个线程,该怎么判断,代码要怎么写呢?求指点。。。。。。。。。
安卓,主线程和子线程间传递消息,出错·,求大家帮我看看
我的代码如下: activitymain.xml: <LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <Button android:id="@+id/t1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击这里进行消息传递"/> <TextView android:id="@+id/t2" android:layout_width="192dp" android:layout_height="49dp" /> </LinearLayout> MainActivity.java package com.example.test3; import android.os.Bundle; import android.widget.TextView; import android.app.Activity; import android.view.Menu; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.Button; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity { Button but=null; TextView textview=null; Handler handler1,handler2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but=(Button)super.findViewById(R.id.t1); textview=(TextView)super.findViewById(R.id.t2); Print p=new Print(); p.start(); handler1=new Handler() { public void HandleMessage(Message msg) { if(msg.what==101) MainActivity.this.textview.setText(msg.getData().getString("toMain").toString()); } }; but.setOnClickListener(new OnClickListenerimpl()); } @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; } class Print extends Thread { public void run() { final Message msgReply=handler1.obtainMessage(); Looper.prepare(); handler2=new Handler(){ public void handleMessage(Message msg) { if(msg.what==100) System.out.println("接收到了来自主线程的消息"); msgReply.what=101; Bundle bundle=new Bundle(); bundle.putString("toMain", "返回的消息"); msgReply.setData(bundle); handler1.sendMessage(msgReply); } }; Looper.loop(); } } class OnClickListenerimpl implements OnClickListener { public void onClick(View v) { if(MainActivity.this.handler2 != null) {Message msg=handler2.obtainMessage(); msg.what=100; handler2.sendMessage(msg); } } } } 然后,如下是logcat: ![图片说明](https://img-ask.csdn.net/upload/201511/22/1448199852_90553.png) 运行程序后,当按下一次按钮后,logcat里只会出现”接收到了来自主线程的消息“,如图中的第一行。但是等待一段时间该程序仍不会显示”返回的消息“,然后再按下一次按钮,一下子logcat就会弹出图中除第一行外的提示信息(图中最高两行是”接收到了来自主线程的消息“,第一个是第一次按按钮弹出的,第二个及以下的是第二次按下按钮弹出的”)。同时程序会强制退出,并提示“抱歉,已强行关闭”。 希望大家能帮我看看是怎么回事?
为什么我android UDP通信 只能发信息接收不到信息。请大神帮忙
主进程 import android.support.v7.app.ActionBarActivity; import android.annotation.SuppressLint; 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.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class YuntuActivity extends ActionBarActivity implements OnClickListener { private TextView adSpeed; private TextView reSpeed; private TextView reTxt; private Button btnHeadCar; private Button btnAgree; private Button btnApply; private Button btnStart; private Button btnExit; //自定义变量 private String remoteIP = null; private int rePort = 0; private int loPort = 0; private UDPThread reTxtThread = null; private UDPThread adSpeedThread = null; private UDPThread reSpeedThread = null; private String sendStr = null;//发送的字符串 private String receStr = null; Handler mhander = new Handler() { public void handleMessage(Message msg) { Bundle bundle =new Bundle(); bundle = msg.getData(); receStr = bundle.getString("info"); reTxt.setText(receStr); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_yuntu); //初始化UI initUI(); //初始化 init(); reTxtThread = new UDPThread(mhander); } private void init() { remoteIP = "172.22.130.124"; rePort = 8801; loPort = 8805; } //初始化UI private void initUI() { adSpeed =(TextView)findViewById(R.id.AdSpeed); reSpeed =(TextView)findViewById(R.id.ReSpeed); reTxt =(TextView)findViewById(R.id.reTxt); btnHeadCar =(Button)findViewById(R.id.button1); btnAgree =(Button)findViewById(R.id.button2); btnApply =(Button)findViewById(R.id.button3); btnStart =(Button)findViewById(R.id.button4); btnExit =(Button)findViewById(R.id.button5); } @Override public void onClick(View v) { switch (v.getId()) { //点击 同意入队 按钮 case R.id.button1: sendStr = "you can join in flownteam."; if(!sendStr.trim().equals("")) { reTxtThread.sendData(sendStr); } break; //点击 申请入队按钮 case R.id.button2: sendStr = "Can I join in?"; if(!sendStr.trim().equals("")) { reTxtThread.sendData(sendStr); } break; //点击申请离队按钮 case R.id.button3: sendStr = "Can I exit?"; if(!sendStr.trim().equals("")) { reTxtThread.sendData(sendStr); } break; //点击开始监听按钮 case R.id.button4: reTxtThread.setReomteIP(remoteIP); reTxtThread.setRePort(rePort); reTxtThread.setLoPort(loPort); boolean connResult = reTxtThread.connectSocket(); if(connResult) { Toast.makeText(getApplicationContext(), "链接建立完毕!", Toast.LENGTH_SHORT).show(); } break; //点击关闭监听按钮 case R.id.button5: reTxtThread.disConnectSocket(); Toast.makeText(getApplicationContext(), "链接已经关闭!", Toast.LENGTH_SHORT).show(); break; default: break; } } } 子线程:接收和发送UDP包 package com.example.cqput_yuntu2; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.text.SimpleDateFormat; import java.util.Date; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.TextView; public class UDPThread implements Runnable { // 定义变量 private TextView rTextView = null; private String reomteIP = null; private int rePort = 0; private int loPort = 0; private Thread rThread = null; private static String CHARECTER = "UTF-8"; private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 接收 private byte[] rBuffer = new byte[1024]; private DatagramSocket rSocket = null; private DatagramPacket rPacket = null; private String rStr = null; // 发送 private DatagramSocket sSocket = null; private DatagramPacket sPacket = null; private byte[] sBuffer = new byte[1024]; public Handler mhandler; public UDPThread(Handler handler) { mhandler = handler; } @Override public void run() { // 开始接收数据 Looper.prepare(); if (Thread.currentThread() == rThread) { System.out.println("------jieshouqian"); rStr = receiveData(); System.out.println("------jieshouhou"); Message toMain = mhandler.obtainMessage(); Bundle bundle = new Bundle(); bundle.putString("info", rStr); toMain.setData(bundle); mhandler.sendMessage(toMain); } ; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 开始接收数据 private String receiveData() { try { ByteArrayInputStream bais = new ByteArrayInputStream(rBuffer); DataInputStream dis = new DataInputStream(bais); if (rSocket == null) { rSocket = new DatagramSocket(8805); } if (rPacket == null) { rPacket = new DatagramPacket(rBuffer, rBuffer.length); } System.out.println("----rece"); rSocket.receive(rPacket); System.out.println("------receHou"); rStr = dis.readUTF().trim(); System.out.println("------jieBeg"); rStr = String.format("[%s:%d//%s]%s", rPacket.getAddress() .getHostAddress(), rPacket.getPort(), sdf .format(new Date()), rStr); return rStr; } catch (Exception e) { e.printStackTrace(); System.out.println("-----------------recvdata error:" + e.getMessage()); } return null; } // 建立连接 public boolean connectSocket() { boolean result = false; // 开启一个新的线程 startThread(); System.out.print("监听线程开启"); result = true; return result; } // 关闭连接 public void disConnectSocket() { if (rSocket != null) { rSocket.close(); rSocket = null; } if (rPacket != null) { rPacket = null; } // 关闭线程 stopThread(); } // 关闭线程 private void stopThread() { if (rThread != null) { rThread.stop(); rThread = null; } } // 开启新的线程 private void startThread() { if (rThread == null) { rThread = new Thread(this); rThread.start(); } } // 开始发送数据 public void sendData(String sendStr) { try { // 包装数据 ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(sendStr); sBuffer = baos.toByteArray(); if (sSocket == null) { sSocket = new DatagramSocket(); } if (sPacket == null) { sPacket = new DatagramPacket(sBuffer, sBuffer.length, InetAddress.getByName(reomteIP), rePort); } sSocket.send(sPacket); sSocket.close(); sSocket = null; sPacket = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); sSocket.close(); sSocket = null; sPacket = null; System.out.println("senddata error:" + e.getMessage()); } } public void setReomteIP(String reomteIP) { this.reomteIP = reomteIP; } public void setRePort(int rePort) { this.rePort = rePort; } public void setLoPort(int loPort) { // this.loPort = loPort; } }
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); } }; ```
android中出现ActivityNotFoundException异常
自己编的程序出现了异常数值总传不过去是怎么回事? ``` String num=editText.getText().toString(); num=num.trim(); Intent numIntent=new Intent(); numIntent.putExtra("num",num); startActivityForResult(numIntent,NUMVALUE); ``` 这个是按钮的监听事件。 ``` case NUMVALUE: String guessNum=intent.getStringExtra("num"); System.out.println(guessNum); int guessNumber=Integer.parseInt(guessNum); ``` 这个事onActivityResult方法接收数据的代码,但是总是传不过去是怎么回事? 异常如下: 07-30 14:25:39.328: E/AndroidRuntime(678): FATAL EXCEPTION: main 07-30 14:25:39.328: E/AndroidRuntime(678): android.content.ActivityNotFoundException: No Activity found to handle Intent { (has extras) } 07-30 14:25:39.328: E/AndroidRuntime(678): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.app.Activity.startActivityForResult(Activity.java:2827) 07-30 14:25:39.328: E/AndroidRuntime(678): at com.example.smallgames.GuessActivity$1.onClick(GuessActivity.java:69) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.view.View.performClick(View.java:2485) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.view.View$PerformClick.run(View.java:9080) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.os.Handler.handleCallback(Handler.java:587) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.os.Handler.dispatchMessage(Handler.java:92) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.os.Looper.loop(Looper.java:123) 07-30 14:25:39.328: E/AndroidRuntime(678): at android.app.ActivityThread.main(ActivityThread.java:3683) 07-30 14:25:39.328: E/AndroidRuntime(678): at java.lang.reflect.Method.invokeNative(Native Method) 07-30 14:25:39.328: E/AndroidRuntime(678): at java.lang.reflect.Method.invoke(Method.java:507) 07-30 14:25:39.328: E/AndroidRuntime(678): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 07-30 14:25:39.328: E/AndroidRuntime(678): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-30 14:25:39.328: E/AndroidRuntime(678): at dalvik.system.NativeStart.main(Native Method) 求大神指点呀!!!
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(); } } ``` 希望尽快解答
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me a few
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试一个ArrayList我都能跟面试官扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问