S7300通过DP线连接,需要采集底层PLC的数据

小弟在工作中遇到一个问题:通过prodave5.5版本的W95-S7.dll进行plc300的连接。网上有说这个
版本连接S7300还是蛮稳定的,所以采用了这种方法。另外一个使用该库的原因是因为在使用libnodave时发现一个客户端连接上之后使用libnodave会造成连接成功,读取失败的故障。通过测试还是w95-s7这个比较好。
现在的问题是:当我去写好的程序放在了工控机上之后还是会出现这样的问题,就是我的程序部署上去之后还是需要把之前厂家做的数采客户端退掉,我的程序才可以运行成功。在没有退出他们的程序之前,我看日志中报的错误是读取地址块失败。弄得我百思不得其解。不知道问题出现在哪里。

备注下:之前厂家在工控机上面有部署一个他们公司开发的通用的驱动程序。上面显示有读取MPI地址4占用了两个,加上的我就是三个。但是我在本地运行了几个程序都是蛮正常的。

不好意思,没有C币了

3个回答

现在我在机台上面测试只要超过三个客户端连接plc就会造成这样最后一个通讯失败

用个HINET 智能网关就行了,采集起来很简单,不用这么麻烦的……

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Dynamic Programming? 动态编程的问题
Problem Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solving complex problems by breaking them down into simpler sub-problems. It is applicable to problems exhibiting the properties of overlapping sub-problems which are only slightly smaller and optimal substructure. Ok, here is the problem. Given an array with N integers, find a continuous subsequence whose sum’s absolute value is the smallest. Very typical DP problem, right? Input The first line contains a single integer T, indicating the number of test cases. Each test case includes an integer N. Then a line with N integers Ai follows. Technical Specification 1. 1 <= T <= 100 2. 1 <= N <= 1 000 3. -100 000 <= Ai <= 100 000 Output For each test case, output the case number first, then the smallest absolute value of sum. Sample Input 2 2 1 -1 4 1 2 1 -2 Sample Output Case 1: 0 Case 2: 1
Dynamic Programming? 动态编程的实现
Problem Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solving complex problems by breaking them down into simpler sub-problems. It is applicable to problems exhibiting the properties of overlapping sub-problems which are only slightly smaller and optimal substructure. Ok, here is the problem. Given an array with N integers, find a continuous subsequence whose sum’s absolute value is the smallest. Very typical DP problem, right? Input The first line contains a single integer T, indicating the number of test cases. Each test case includes an integer N. Then a line with N integers Ai follows. Technical Specification 1. 1 <= T <= 100 2. 1 <= N <= 1 000 3. -100 000 <= Ai <= 100 000 Output For each test case, output the case number first, then the smallest absolute value of sum. Sample Input 2 2 1 -1 4 1 2 1 -2 Sample Output Case 1: 0 Case 2: 1
Android基于UDP传输协议的Socket编程,控制台报错
源代码 ``` private synchronized void sendData(final byte[] data) { DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); final String ip; if (dhcpInfo != null) { ip = intToIp(dhcpInfo.serverAddress); } else { ip = "0.0.0.0"; } new Thread(new Runnable() { @Override public void run() { try { InetAddress address = InetAddress.getByName(ip); DatagramSocket ds = new DatagramSocket(); DatagramPacket dp = new DatagramPacket (data, data.length, address,8080); ds.send(dp); ds.close(); } catch (IOException e) { e.printStackTrace(); } } }).start(); try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } ``` Android Studio控制台报错 ``` I/qtaguid: Untagging socket 59 failed errno=-22 ``` ``` I/qtaguid: Untagging socket 61 failed errno=-22 ```
dev与vs运行结果不同 矩阵路径数问题
求解(ㄒoㄒ) 应该算**矩阵路径数问题**,代码如下 ``` #include<iostream> using namespace std; long long m, n, ans; int dp[100][100]; long long solve(int m, int n) { if (m == 1 || n == 1) return 1; else if (dp[m][n] > 0) { cout << m << " " << n << " " << dp[m][n] << endl;//在这里输出查看 return dp[m][n]; } //else if (dp[n][m] > 0) // return dp[n][m]; else dp[m][n] = solve(m - 1, n) + solve(m, n - 1); //只能从上或左来,等于到左边格子的路径数加到右边格子的路径数 } int main() { cin >> m >> n; for (int i = 0; i < 100; i++) { //初始化 for (int j = 0; j < 100; j++) { dp[i][j] = -1; } } ans = solve(m, n); cout << ans << endl; return 0; } ``` 同样的代码在vs中可以输出正确结果,在dev中却错误 这是输入10 10 在dev中的输出结果 ![图片说明](https://img-ask.csdn.net/upload/202001/05/1578191857_872096.jpg) 正确运行结果应该是48620 ![图片说明](https://img-ask.csdn.net/upload/202001/05/1578191936_647211.jpg)
求助 android scrollview滚动时 toolbar会变色的bug
android scrollview滚动时 差不多 碰到第一个 imageView时 toolbar就会变色 代码很简单 就一个布局文件 加一个activity bug现象:是滚动到一半时 toolbar会变色,为什么? 布局文件 比较长 但没啥东西 就一个scrollview 里面加了几个imageView imageView 用的是比较大的图片 432x1965的大图 ,主要是为了能更快复现bug 调了好几天 最后把代码清一清,新建了一个activity发现还是能复现 demo_my_test_activtiy.xml ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/demo_test_toolbar" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="热点" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/id_web_image" android:layout_width="200dp" android:layout_height="160dp" /> <Button android:id="@+id/id_btn_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/test" /> <ImageView android:id="@+id/zoom_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/activity_vertical_margin" android:adjustViewBounds="true" android:maxHeight="750dp" android:src="@drawable/qmshtu_v" /> <ImageView android:id="@+id/zoom_image2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/activity_vertical_margin" android:adjustViewBounds="true" android:maxHeight="750dp" android:src="@drawable/qmshtu_v" /> <ImageView android:id="@+id/zoom_image3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/activity_vertical_margin" android:adjustViewBounds="true" android:maxHeight="650dp" /> <ImageView android:id="@+id/image_view_glide" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView> </LinearLayout> ``` demo_test_toolbar.xml ``` <merge xmlns:android="http://schemas.android.com/apk/res/android" > <!--加了这个 在actionbar 下出现阴影--> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="80dp" android:minHeight="?attr/actionBarSize" android:paddingTop="@dimen/status_bar_height" android:background="#FF00FFEE" > </android.support.v7.widget.Toolbar> </merge> ``` ``` public class MyTestActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo_my_test_activtiy); } } ``` 整个代码 没干啥事 有没有人遇到过? 怎么解决 现在发现 这个BUG在红米手机上会出现 但在山寨平板上不会 不知道是不是MIUI特有的问题
Android 手持PDA 如何让扫描到的数据,跟随光标,输入到任意EditText
最近在研究Android 手持PDA的扫描系统 从厂家获得到了demo的源代码, 按照厂家的源代码修改完之后。发现扫描到的内容只能输入到固定的文本框内 如果一个界面内有有两个文本框,就只能输入到第一个文本框内。 请问如何能根据光标的位置,输入到不同的文本框内 布局文件 ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:text="Scan Test" android:id="@+id/tv_title" android:textSize="40dp"/> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:layout_below="@+id/tv_title" android:id="@+id/et1"/> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:layout_below="@+id/et1" android:id="@+id/et2"/> <Button android:id="@+id/btnOpen" android:layout_below="@+id/et2" android:text="Scan" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> ``` JAVA文件 ``` import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.text.Spannable; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import com.qs.service.ScanService; import com.zebra.sdl.SDLguiActivity; import java.util.ArrayList; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private ScanBroadcastReceiver scanBroadcastReceiver; Button btnOpen, btnEdit; public static EditText et_code1; List<Map<String, String>> listData = new ArrayList<Map<String, String>>(); String str2,str1,str; String TAG="数据"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_code1 = (EditText) findViewById(R.id.et1); et_code1.setText(""); btnOpen = (Button) findViewById(R.id.btnOpen); btnOpen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //斑马头软解码方式 if(Build.MODEL.contains("mipi")){ SDLguiActivity.doDecode(); }else{ //普通硬解码 ScanService.openScan(); } } }); //斑马头软解码方式 if(Build.MODEL.contains("mipi")){ //软解码为摄像头形式,需要加上权限 if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 1000); } else { //说明已经获取到摄像头权限了 想干嘛干嘛 Intent newIntent = new Intent(MainActivity.this, SDLguiActivity.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startService(newIntent); } }else{ Intent newIntent = new Intent(MainActivity.this, ScanService.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startService(newIntent); } scanBroadcastReceiver = new ScanBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.qs.scancode"); this.registerReceiver(scanBroadcastReceiver, intentFilter); } @Override protected void onResume() { System.out.println("onResume" + "open"); Log.v("onResume", "open"); super.onResume(); } @Override protected void onDestroy() { this.unregisterReceiver(scanBroadcastReceiver); super.onDestroy(); } class ScanBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //text1为扫描信息 String text1 = intent.getExtras().getString("code"); String str = et_code1.getText().toString().trim()+"\n"; et_code1.setText(str + text1); Editable text = et_code1.getText(); Spannable spanText = text; Selection.setSelection(spanText, text.length()); } } } ``` 求大神指点,本人是初学者,麻烦详细一点。
请教一道dp题名:储蓄罐
储蓄罐 小明和佳佳打破了他们共同积攒的储蓄罐,里面有各种各样的零钱,共有N张纸币。现在,他们两人想要尽可能的平分这些纸币,但是纸币上的面值可能各不相同,他们想尽了办法,决定先求得最多能分成的两份面值总和相同的纸币。 再将剩下无法平分的纸币总和x,由妈妈再出一份相同的份额x,那么,他们就可以得到同样的总钱数。 现在妈妈请你算一下,在妈妈出钱最少的情况下,小明和佳佳分别能得到多少总钱数。 输入 第一行一个整数N,表示有N张纸币。 接下来N行,每行一个整数,表示每张纸币的面值,面值总和不会超过100000 输出 输出他们两人分别可以得到的总钱数。 样例输入 4 2 3 1 6 5 2 3 5 8 13 样例输出 6 18 提示 【样例解释1】 4张纸币,刚好可以分成1+2+3=6,平分两份,妈妈就不用再出钱了,两人分别得到6元。 【样例解释2】 5张纸币,最多可以得到5+8=13,剩下的2和3无法再平分,妈妈再出5元,这样两人可以得到13+5=18元 【数据范围】 50%的测试数据,N不会超过13。 70%的测试数据,N不会超过50,总钱数不会超过1000。 100%的测试数据,N不会超过500,总钱数不会超过100000。 用dp怎么做
Dynamic Programming怎么实现的呢
Problem Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solving complex problems by breaking them down into simpler sub-problems. It is applicable to problems exhibiting the properties of overlapping sub-problems which are only slightly smaller and optimal substructure. Ok, here is the problem. Given an array with N integers, find a continuous subsequence whose sum’s absolute value is the smallest. Very typical DP problem, right? Input The first line contains a single integer T, indicating the number of test cases. Each test case includes an integer N. Then a line with N integers Ai follows. Technical Specification 1. 1 <= T <= 100 2. 1 <= N <= 1 000 3. -100 000 <= Ai <= 100 000 Output For each test case, output the case number first, then the smallest absolute value of sum. Sample Input 2 2 1 -1 4 1 2 1 -2 Sample Output Case 1: 0 Case 2: 1
为什么只显示是1条列表,使用SimpleAdapter情况下
为什么只显示是1条列表,只显示了1条列表,无法显示后3条 代码如下: ``` package com.example.student201911233; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends Activity { private String[] names = new String[] { "虎头","弄玉","李清照","李白"}; private String[] descs = new String[] {"可爱的小孩","一个擅长音乐的女孩","一个擅长文学的女孩","浪漫主义诗人"}; private int[] imageIds = new int[] { R.drawable.laohu, R.drawable.ic_ma, R.drawable.ic_she, R.drawable.ic_zhu}; private int i; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建一个List集合,List集合的元素是Map List<Map<String,Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i=0;i<names.length;i++);{ Map<String,Object> listItem = new HashMap<String, Object>(); listItem.put("header",imageIds[i]); listItem.put("personName",names[i]); listItem.put("desc",descs[i]); listItems.add(listItem); } //创建一个SimpleAdapted SimpleAdapter simpleAdapter = new SimpleAdapter(this,listItems,R.layout.simple_item, new String[]{ "personName","header","desc"},new int[]{ R.id.name,R.id.header,R.id.desc}); ListView listView = (ListView)findViewById(R.id.mylist); listView.setAdapter(simpleAdapter); } } ``` **这是主布局,就只有一个ListView。** ``` <?xml version="1.0" encoding="utf-8"?> <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:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="使用SimpleAdapted创建List View"></TextView> <ListView android:id="@+id/mylist" android:layout_width="match_parent" android:layout_height="wrap_content" ></ListView> </LinearLayout> ``` 这是次布局,有一个ImageView和2个TextView ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/header" android:padding="10dp"></ImageView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/name" android:textSize="20dp" android:textColor="#f0f" android:paddingLeft="10dp"></TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/desc" android:textSize="14dp" android:paddingLeft="10dp"></TextView> </LinearLayout> </LinearLayout> ``` private int i; 网上这句话是没有的,但我不加的话,就显示错误了。。。。
如何使组合控件可悬浮拖动实现返回顶部的功能?(问题已经解决,原因是FloatingView写的有问题)
我有一个创建了一个组合控件,然后想让这个组合控件在页面内随意拖动实现返回顶部的功能,然后FloatingView继承了这个组合控件后,使用报运行时异常,请问我该怎么修改?谢谢 下面是组合控件: ``` public class BackTopView extends RelativeLayout { private TextView text_view; private View rootView; private String back_text; public BackTopView(Context context) { super(context); init(); } public BackTopView(Context context, AttributeSet attrs) { super(context, attrs); init(); back_text=attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","setting_text"); text_view.setText(back_text); } public BackTopView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ rootView=View.inflate(getContext(), R.layout.back_top_layout,this); text_view=rootView.findViewById(R.id.back_text); } public void setText(String text){ text_view.setText(text); } } ``` 下面是悬浮实现 ``` public class FloatingView extends BackTopView { int startX; int startY; int left; int top; int[] temp = new int[]{ 200, 200 }; public FloatingView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { boolean isMove = false; int x = (int) event.getRawX(); int y = (int) event.getRawY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: // touch down so check if the startX = x; startY = y; temp[0] = (int) event.getX(); temp[1] = y - getTop(); break; case MotionEvent.ACTION_MOVE: // touch drag with the ball left = x - temp[0]; top = y - temp[1]; if(left < 0){//控制左边界不超出 left = 0; } layout(left, top, left + getWidth(),top + getHeight());//自由拖拽 break; case MotionEvent.ACTION_UP: if (Math.abs(x - startX) > 2 || Math.abs(y - startY) > 2){//判断是否移动,再一定范围内不算是移动,解决触发事件冲突 //将最后拖拽的位置定下来,否则页面刷新渲染后按钮会自动回到初始位置 //注意父容器 RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams(); lp.setMargins(left, top,0,0); setLayoutParams(lp); //确定是拖拽 isMove = true; } break; } return isMove ? true : super.onTouchEvent(event); } } ``` 引用到的XML ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/first_layout" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".AssetsActivity" android:orientation="vertical" android:clickable="true" android:focusableInTouchMode="true"> <RelativeLayout android:id="@+id/edit_relativew" android:layout_marginTop="15dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:background="@drawable/edit_frame_shape"> <EditText android:id="@+id/assets_edit" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginLeft="16dp" android:layout_marginRight="15dp" android:background="@null" android:hint=" 搜索设备" android:imeOptions="actionSearch" android:singleLine="true"></EditText> <ImageButton android:id="@+id/assets_btu" android:layout_alignRight="@id/assets_edit" android:layout_centerVertical="true" android:layout_width="25dp" android:layout_height="25dp" android:layout_gravity="center" android:background="@drawable/select"> </ImageButton> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/edit_relativew" android:layout_marginTop="10dp" android:orientation="vertical"> <com.zxkj.e_delivermaintain.Adapter.LoadListView android:id="@+id/assets_list" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null"> </com.zxkj.e_delivermaintain.Adapter.LoadListView> </RelativeLayout> <include android:id="@+id/emptyview" layout="@layout/list_empty"/> <com.zxkj.e_delivermaintain.Adapter.FloatingView android:id="@+id/back_top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"> </com.zxkj.e_delivermaintain.Adapter.FloatingView> </RelativeLayout> ``` 报错内容 ``` java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zxkj.e_delivermaintain/com.zxkj.e_delivermaintain.AssetsActivity}: android.view.InflateException: Binary XML file line #68: Binary XML file line #68: Error inflating class com.zxkj.e_delivermaintain.Adapter.FloatingView ``` 谢谢你的帮助!!
constraintlayout居中怎么无法实现?
![图片说明](https://img-ask.csdn.net/upload/201912/02/1575282442_69475.png) ``` <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/left_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/beijing_left_text" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <TextView android:id="@+id/left_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/right_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/beijing_right_text" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/left_layout"> <TextView android:id="@+id/right_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> ```
Recyclerview嵌套recyclerview的深坑,我坐在Recyclerview这个坑里很久了,仰望天空希望能把我拉上去。
Recyclerview嵌套recyclerview的深坑,对于一个新手来说怎么也上不去,特来邀请键盘中的高手高高手,拉拉我; ## 第一个Recyclerview布局: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/area_LinearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/drawable_black_one" android:orientation="horizontal" android:layout_margin="3dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_gravity="center" android:text="" android:textColor="@drawable/drawable_white_pure" android:lines="1" android:layout_weight="1"/> <TextView android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center" android:layout_margin="5dp" android:background="@color/whiteness" /> <TextView android:id="@+id/peers_location_TextView" android:layout_width="70dp" android:layout_height="40dp" android:layout_marginLeft="5sp" android:layout_marginRight="10dp" android:ellipsize="end" android:gravity="center" android:text="" android:textColor="@color/whiteness" android:textSize="14sp" android:lines="1" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="3dp" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:layout_marginTop="0dp" android:layout_marginEnd="10dp" android:scaleType="fitStart" android:src="@drawable/location" /> </RelativeLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/drawable_black_one" android:layout_gravity="center" android:focusable="true" android:focusableInTouchMode="true" android:layout_margin="3dp"> <EditText android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_margin="1dp" android:background="@color/text_white" android:hint="行业人员" android:textSize="13dp" android:gravity="center" android:lines="1" android:layout_weight="1"/> <TextView android:layout_width="50dp" android:layout_height="wrap_content" android:text="搜索" android:textSize="14dp" android:layout_marginLeft="14dp" android:layout_gravity="center" android:textColor="@color/whiteness" android:layout_margin="5dp" android:gravity="center"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/user_info_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ``` ## 在第一个Recycleview的item里面嵌套了第二个Recyclerview不知道这样对不对? ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/portrait" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/user_portrait" android:layout_width="50dp" android:layout_height="50dp" android:layout_margin="5dp" android:src="@drawable/em_default_avatar" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="20dp" android:layout_marginTop="5dp" android:gravity="clip_horizontal"> <TextView android:id="@+id/user_industry" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/dialog_circular_whiteness" android:ellipsize="end" android:gravity="center" android:text="建筑" android:textColor="@color/colorPrimary" android:textSize="14sp" android:textStyle="bold" /> <TextView android:id="@+id/user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_marginLeft="5dp" android:background="@drawable/dialog_circular_whiteness" android:ellipsize="end" android:gravity="center" android:text="努力改变自己" android:textColor="#323232" android:textSize="10sp" android:textStyle="bold" /> <TextView android:id="@+id/name_voip" android:layout_width="20dp" android:layout_height="wrap_content" android:layout_gravity="center" android:ellipsize="end" android:gravity="center" android:text="voip" android:textColor="@color/text_pink" android:textSize="7sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="35dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="努力改变自己" android:textSize="12dp" /> </LinearLayout> </LinearLayout> <RelativeLayout android:layout_width="60dp" android:layout_height="match_parent" android:gravity="center"> <TextView android:id="@+id/user_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="@drawable/dialog_circular_whiteness" android:text="" android:textSize="12dp" android:textStyle="bold" /> </RelativeLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"> **<!-- 导入RecyclerView-->** <android.support.v7.widget.RecyclerView android:id="@+id/user_peesr_info" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="访问:10000人" android:textSize="8dp" /> </LinearLayout> </LinearLayout> </LinearLayout> ``` ## 第一个Recyclerview的适配器: ``` public class Home_RecyclerView_Adapter extends RecyclerView.Adapter<Home_RecyclerView_Adapter.myViewHodler> { private Context context; private LinkedList<Home_list_get_set> LinkedList; public LinkedList<User_Recruitment_get_set> mLinkedList; public Home_list_get_set mHome_list_get_set; //创建构造函数 public Home_RecyclerView_Adapter(Context context, LinkedList<Home_list_get_set> industrytitlegetsetList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.LinkedList = industrytitlegetsetList;//实体类数据ArrayList } /** * 创建viewhodler,相当于listview中getview中的创建view和viewhodler * * @param parent * @param viewType * @return */ @Override public myViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView user_peesr_info;//自定义recyclerveiw的适配器 //创建自定义布局 // View itemView = View.inflate(context, R.layout.peers_list_item, null);//用这个布局item宽高无效 // myViewHodler itemView = new myViewHodler(LayoutInflater.from(context).inflate(R.layout.peers_list_item, parent, false)); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.peers_list_item, parent, false); user_peesr_info = view.findViewById (R.id.user_peesr_info); //给嵌套的RecyclerView设置适配器 User_Recruitment_Adapter user_recruitment_adapter = new User_Recruitment_Adapter (context,mLinkedList); user_peesr_info.setAdapter (user_recruitment_adapter); user_peesr_info.setLayoutManager (new LinearLayoutManager (context, LinearLayoutManager.HORIZONTAL, false)); //给嵌套的RecyclerView设置item的分割线 user_peesr_info.addItemDecoration (new DividerItemDecoration (context, DividerItemDecoration.HORIZONTAL)); return new myViewHodler(view); // return itemView; } /** * 绑定数据,数据与view绑定 * * @param holder * @param position */ @SuppressLint("ClickableViewAccessibility") @Override public void onBindViewHolder(myViewHodler holder, int position) { //根据点击位置绑定数据 mHome_list_get_set = LinkedList.get(position); // holder.mItemGoodsImg; holder.user_name.setText(mHome_list_get_set.getUser_name()); holder.user_industry.setText(mHome_list_get_set.getUser_work()); // holder.user_portrait.setImageDrawable (data.getHead_portait ());//改为下面Glide获取图上 Glide.with(context) .load(mHome_list_get_set.getHead_portait ())//图片信息 .apply(RequestOptions.bitmapTransform(new CircleCrop ()))//设置圆形 .into(holder.user_portrait);//设置到那个部位 holder.name_voip.setText(mHome_list_get_set.getUser_Vip()); holder.user_location.setText(mHome_list_get_set.getUser_location()); } /** * 得到总条数 * * @return */ @Override public int getItemCount() { // return LinkedList.size(); return LinkedList == null ? 0 : LinkedList.size(); } //自定义viewhodler class myViewHodler extends RecyclerView.ViewHolder { private ImageView user_portrait; private TextView user_name; private TextView user_industry; private TextView name_voip; private TextView user_location; public RecyclerView user_peesr_info;//自定义recyclerveiw的适配器 public myViewHodler(View itemView) { super(itemView); user_peesr_info = itemView.findViewById (R.id.user_peesr_info); user_portrait = itemView.findViewById(R.id.user_portrait); user_name = itemView.findViewById(R.id.user_name); user_industry = itemView.findViewById(R.id.user_industry); name_voip = itemView.findViewById(R.id.name_voip); user_location = itemView.findViewById(R.id.user_location); user_portrait.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可以选择直接在本位置直接写业务处理 //Toast.makeText(context,"点击了xxx",Toast.LENGTH_SHORT).show(); //此处回传点击监听事件 if (onItemClickListener != null) { onItemClickListener.OnItemClick(v, LinkedList.get(getLayoutPosition())); } } }); } public View getItemView() { return itemView; } } /** * 设置item的监听事件的接口 */ public interface OnItemClickListener { /** * 接口中的点击每一项的实现方法 * * @param view 点击的item的视图 * @param data 点击的item的数据 */ public void OnItemClick(View view, Home_list_get_set data); } //需要外部访问,所以需要设置set方法,方便调用 private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } ``` ## 第二个Recyclerview的适配器: ``` public class User_Recruitment_Adapter extends RecyclerView.Adapter<User_Recruitment_Adapter.myViewHodler> { public LinkedList<User_Recruitment_get_set> m_LinkedList; private Context context; public User_Recruitment_get_set mUser_Recruitment_get_set; //创建构造函数 public User_Recruitment_Adapter(Context context, LinkedList<User_Recruitment_get_set> mLinkedList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.m_LinkedList = mLinkedList; } @NonNull @Override public myViewHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.user_peers_recruitment_item, viewGroup, false); return new myViewHodler(view); } @Override public void onBindViewHolder(@NonNull myViewHodler myViewHodler, int i) { mUser_Recruitment_get_set = m_LinkedList.get(i); myViewHodler.recruitment.setText (mUser_Recruitment_get_set.getRecruitment ()); } @Override public int getItemCount() { return m_LinkedList == null ? 0 : m_LinkedList.size(); } public class myViewHodler extends RecyclerView.ViewHolder { private TextView recruitment; public myViewHodler(@NonNull View itemView) { super (itemView); recruitment = itemView.findViewById(R.id.recruitment); } } } ``` ## 现问题是嵌套里面的Recyclerview无显示内容?我该如何写?
如何创建一个带有指定版本Python和JupyterLab的环境?
&emsp;&emsp;请问要如何在Anaconda中创建一个同时拥有Python 3.7.4与JupyterLab 1.1.4的环境? &emsp;&emsp;我在cmd中通过以下命令创建了一个Python 3.7.4环境: ```batch D:\Anaconda3\envs>conda create -n dp python=3.7 WARNING: A directory already exists at the target location 'D:\Anaconda3\envs\dp' but it is not a conda environment. Continue creating environment (y/[n])? y Collecting package metadata (current_repodata.json): done Solving environment: done ## Package Plan ## environment location: D:\Anaconda3\envs\dp added / updated specs: - python=3.7 The following NEW packages will be INSTALLED: ca-certificates anaconda/pkgs/main/win-64::ca-certificates-2019.8.28-0 certifi anaconda/pkgs/main/win-64::certifi-2019.9.11-py37_0 openssl anaconda/pkgs/main/win-64::openssl-1.1.1d-he774522_2 pip anaconda/pkgs/main/win-64::pip-19.2.3-py37_0 python anaconda/pkgs/main/win-64::python-3.7.4-h5263a28_0 setuptools anaconda/pkgs/main/win-64::setuptools-41.4.0-py37_0 sqlite anaconda/pkgs/main/win-64::sqlite-3.30.0-he774522_0 vc anaconda/pkgs/main/win-64::vc-14.1-h0510ff6_4 vs2015_runtime anaconda/pkgs/main/win-64::vs2015_runtime-14.16.27012-hf0eaf9b_0 wheel anaconda/pkgs/main/win-64::wheel-0.33.6-py37_0 wincertstore anaconda/pkgs/main/win-64::wincertstore-0.2-py37_0 ``` &emsp;&emsp;Python 3.7.4被成功安装,但当继续安装JupyterLab时,会出现以下问题: ```batch D:\Anaconda3\envs>activate dp D:\Anaconda3\envs>conda.bat activate dp (dp) D:\Anaconda3\envs>conda install jupyterlab Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retrying with flexible solve. Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source. Collecting package metadata (repodata.json): done Solving environment: failed with initial frozen solve. Retrying with flexible solve. Solving environment: | Found conflicts! Looking for incompatible packages. ... UnsatisfiableError: The following specifications were found to be incompatible with each other: Package tornado conflicts for: jupyterlab -> tornado[version='!=6.0.0,!=6.0.1,!=6.0.2'] Package jinja2 conflicts for: jupyterlab -> jinja2[version='>=2.10'] Package notebook conflicts for: jupyterlab -> notebook[version='>=4.3|>=4.3.1'] Package nodejs conflicts for: jupyterlab -> nodejs[version='<10'] Package sqlite conflicts for: python=3.7 -> sqlite[version='>=3.25.3,<4.0a0|>=3.26.0,<4.0a0|>=3.27.2,<4.0a0|>=3.28.0,<4.0a0|>=3.29.0,<4.0a0'] Package openssl conflicts for: python=3.7 -> openssl[version='>=1.1.1a,<1.1.2a|>=1.1.1b,<1.1.2a|>=1.1.1c,<1.1.2a'] Package pip conflicts for: python=3.7 -> pip Package jupyterlab_launcher conflicts for: jupyterlab -> jupyterlab_launcher[version='>=0.10.0,<0.11.0|>=0.11.0,<0.12.0|>=0.11.2,<0.12.0|>=0.13.1,<0.14.0|>=0.4.0|>=0.6.0,<0.7.0'] Package subprocess32 conflicts for: jupyterlab -> subprocess32 Package futures conflicts for: jupyterlab -> futures Package jupyterlab_server conflicts for: jupyterlab -> jupyterlab_server[version='>=0.2.0,<0.3.0|>=1.0.0,<2.0.0'] Package vc conflicts for: python=3.7 -> vc[version='14.*|>=14.1,<15.0a0'] ``` &emsp;&emsp;这个是什么问题?如何解决?感觉默认的base环境很庞大,很多东西用不到。但想要使用JupyterLab又不得不安装……
UDP模拟客户端和服务端聊天不能连续发送消息?
使用UDP模拟客户端和服务端聊天,但是客户端发送一条消息之后就不能再连续发了,只能等服务端响应之后才能接着发送第二条,怎么解决这个问题啊?求大牛讲解? 下面是源码 服务端 ``` public class Server { public static void main(String[] args) throws IOException { Scanner scanner=new Scanner(System.in); //服务端(接收方)的端口 DatagramSocket ds=new DatagramSocket(8886); System.out.println("服务端已经启动!"); while(true) { //准备收数据 byte[] b=new byte[1024]; DatagramPacket dp=new DatagramPacket(b, b.length); //开始收 收到的是字节数组 ds.receive(dp); System.out.println(new String(dp.getData(),0,dp.getLength())); System.out.println("对方IP地址:"+dp.getAddress()+" "+"端口:"+dp.getPort()); //发数据 //准备数据 String s=scanner.next(); byte[] buf=s.getBytes(); //打包 DatagramPacket dp2=new DatagramPacket(buf, buf.length,dp.getAddress(),dp.getPort()); ds.send(dp2); if("bye".equals(s)) { break; } } ds.close(); } } ``` 客户端 ``` public class Client { public static void main(String[] args) throws SocketException, IOException { Scanner scanner=new Scanner(System.in); //发数据 DatagramSocket ds=new DatagramSocket(9999);//客户端的端口号是9999 System.out.println("客户端已经启动,开始聊天吧?!"); while(true) { String s=scanner.next(); byte[] buf=s.getBytes(); DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8886); ds.send(dp); byte[] buf2=new byte[1024]; DatagramPacket dp2=new DatagramPacket(buf2, buf2.length); ds.receive(dp2); System.out.println("对方IP地址:"+dp2.getAddress()+" "+"端口:"+dp2.getPort()); String str=new String(dp2.getData(),0,dp2.getLength()); System.out.println(str); if("bye".equals(str)) { break; } } ds.close(); } } ```
IT公司面试题 用网上的dp代码 挂了 请问正确的dp该怎么写
面试官给我出了道老题, 我用了一亩三分地上的dp解答,来源如下 http://www.1point3acres.com/bbs/thread-145290-1-1.html 题目如下: String s1 = "waeginsapnaabangpisebbasepgnccccapisdnfngaabndlrjngeuiogbbegbuoecccc"; String s2 = "a+b+c-"; s2的形式是一个字母加上一个符号,正号代表有两个前面的字符,负号代表有四个,也就是说s2其实是"aabbcccc",不考虑invalid。 在s1中,找出连续或者不连续的s2,也就是说从s1中找出"aa....bb.....cccc",abc顺序不能变,但是之间可以有零个或多个字符,返回共有多少个。在上面这个例子中,有四个。 结果测试sln.findMatches("aaaaaa", "a+a-") ,出来结果为0,不对,挂了 另外System.out.println(sln.findMatches("waeginsapnaabangpisebbasccepgnccccapisdnfngaabndlrjngeuiogbbegbuoecccc", "a+b+c+c-")); 跑出来是5,感觉正确结果应该是2 不知道用dp正确的解答应该是什么?有人能给出正确的dp代码吗? 以下是从拷贝的测试用例不通过的代码: ``` public class Solution { public int findMatches(String s1, String s2){ int len1 = s1.length(), len2 = s2.length(); if (len2 > len1) return 0; if (len2 == 0 || len2 %2 != 0) return 0; // DP matches each pattern // number of matches between s1.substring(0, i + 1) and s2.substring(j * 2, j * 2 + 2) int[][] dp = new int[len1 + 1][len2 / 2 + 1]; // no match for dp[0][j] for (int i = 1; i < len1; i++){ dp[i + 1][0] = 1; for (int j = 0; j < len2 / 2; j++){ dp[i + 1][j + 1] = dp[i][j + 1]; if (isMatch(s1, s2, i, j)){ if (s2.charAt(2*j + 1) == '+') dp[i + 1][j + 1] += dp[i - 1][j]; else dp[i + 1][j + 1] += dp[i - 3][j]; } } } return dp[len1][len2 / 2]; } boolean isMatch(String s1, String s2, int i, int j){ char c = s2.charAt(j * 2); char p = s2.charAt(j * 2 + 1); int len = p == '+' ? 2 : 4; if (i - len < -1) return false; for (int h = i - len + 1; h <= i; h++){ if (s1.charAt(h) != c) return false; } return true; } public static void main(String[] args){ Solution sln = new Solution(); System.out.println(sln.findMatches("waeginsapnaabangpisebbasepgnccccapisdnfngaabndlrjngeuiogbbegbuoecccc", "a+b+c-")); // 4 System.out.println(sln.findMatches("waeginsapnaabangpisebbasccepgnccccapisdnfngaabndlrjngeuiogbbegbuoecccc", "a+b+c+c-")); // 5 ??? I think it should be 2 System.out.println(sln.findMatches("aaaaaa", "a+a-"));//0 wrong! } } ```
java 通过ip获取浏览器端mac地址,ds. receive(dp) 这一句阻塞,求解决方法或其他获取mac地址的方法
java 通过ip获取浏览器端mac地址,之前试过很多种方法都不行。唯一一次可以的方法是通过UDP获得了正确的mac地址,但是之后总是在datagram Soket. receive(datagram Packet) 这一句阻塞,求解? 代码如下: ``` package com.sinosoft.prpins.policy.web; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class MacUtil { private String sRemoteAddr; private int iRemotePort = 137; private byte[] buffer = new byte[1024]; private DatagramSocket ds = null; public MacUtil(String strAddr) throws Exception { sRemoteAddr = strAddr; ds = new DatagramSocket(); } protected final DatagramPacket send(final byte[] bytes) throws IOException { DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress .getByName(sRemoteAddr), iRemotePort); ds.send(dp); return dp; } protected final DatagramPacket receive() throws Exception { DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ds.receive(dp); return dp; } // 询问包结构: // Transaction ID 两字节(16位) 0x00 0x00 // Flags 两字节(16位) 0x00 0x10 // Questions 两字节(16位) 0x00 0x01 // AnswerRRs 两字节(16位) 0x00 0x00 // AuthorityRRs 两字节(16位) 0x00 0x00 // AdditionalRRs 两字节(16位) 0x00 0x00 // Name:array [1..34] 0x20 0x43 0x4B 0x41(30个) 0x00 ; // Type:NBSTAT 两字节 0x00 0x21 // Class:INET 两字节(16位)0x00 0x01 protected byte[] getQueryCmd() throws Exception { byte[] t_ns = new byte[50]; t_ns[0] = 0x00; t_ns[1] = 0x00; t_ns[2] = 0x00; t_ns[3] = 0x10; t_ns[4] = 0x00; t_ns[5] = 0x01; t_ns[6] = 0x00; t_ns[7] = 0x00; t_ns[8] = 0x00; t_ns[9] = 0x00; t_ns[10] = 0x00; t_ns[11] = 0x00; t_ns[12] = 0x20; t_ns[13] = 0x43; t_ns[14] = 0x4B; for (int i = 15; i < 45; i++) { t_ns[i] = 0x41; } t_ns[45] = 0x00; t_ns[46] = 0x00; t_ns[47] = 0x21; t_ns[48] = 0x00; t_ns[49] = 0x01; return t_ns; } // 表1 “UDP-NetBIOS-NS”应答包的结构及主要字段一览表 // 序号 字段名 长度 // 1 Transaction ID 两字节(16位) // 2 Flags 两字节(16位) // 3 Questions 两字节(16位) // 4 AnswerRRs 两字节(16位) // 5 AuthorityRRs 两字节(16位) // 6 AdditionalRRs 两字节(16位) // 7 Name<Workstation/Redirector> 34字节(272位) // 8 Type:NBSTAT 两字节(16位) // 9 Class:INET 两字节(16位) // 10 Time To Live 四字节(32位) // 11 Length 两字节(16位) // 12 Number of name 一个字节(8位) // NetBIOS Name Info 18×Number Of Name字节 // Unit ID 6字节(48位 protected final String getMacAddr(byte[] brevdata) throws Exception { // 获取计算机名 int i = brevdata[56] * 18 + 56; String sAddr = ""; StringBuffer sb = new StringBuffer(17); // 先从第56字节位置,读出Number Of Names(NetBIOS名字的个数,其中每个NetBIOS Names // Info部分占18个字节) // 然后可计算出“Unit ID”字段的位置=56+Number Of // Names×18,最后从该位置起连续读取6个字节,就是目的主机的MAC地址。 for (int j = 1; j < 7; j++) { sAddr = Integer.toHexString(0xFF & brevdata[i + j]); if (sAddr.length() < 2) { sb.append(0); } sb.append(sAddr.toUpperCase()); if (j < 6) sb.append('-'); } return sb.toString(); } public final void close() { try { ds.close(); } catch (Exception ex) { ex.printStackTrace(); } } public final String getRemoteMacAddr() throws Exception { byte[] bqcmd = getQueryCmd(); send(bqcmd); DatagramPacket dp = receive(); String smac = getMacAddr(dp.getData()); close(); return smac; } public static void main(String[] args) throws Exception { MacUtil macUtil = new MacUtil("XXX.XXX.XXX.XXX");//传入IP地址 String mac = macUtil.getRemoteMacAddr(); System.out.println(mac); } } ```
各位,我在点击textView的时候点击第一没反应,点击第二次才会触发事件,这种怎么解决
布局 ``` <LinearLayout android:layout_width="match_parent" android:layout_height="46dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/transaction_four_cancel_order" android:layout_width="50dp" android:layout_height="26dp" android:layout_marginRight="10dp" android:background="@drawable/shape_button_bg_red" android:gravity="center" android:text="撤单" android:textColor="@drawable/selector_text_color_toum" android:textSize="13sp" /> <TextView android:id="@+id/transaction_four_refresh" android:layout_width="50dp" android:layout_height="26dp" android:background="@drawable/shape_button_bg_red" android:gravity="center" android:text="刷新" android:textColor="@color/colorWrite" android:textSize="13sp" /> </LinearLayout> ``` 代码 ``` @OnClick({R.id.transaction_four_cancel_order, R.id.transaction_four_refresh}) public void onClick(View view) { switch (view.getId()) { case R.id.transaction_four_cancel_order: // transactionFourCancelOrder.getBackground().setAlpha(12); transactionFourCancelOrder.setOnTouchListener(touchLis); IntentUtil.startActivity(getActivity(), NoticeActivity.class); break; case R.id.transaction_four_refresh: transactionFourRefresh.setOnTouchListener(touchLiss); IntentUtil.startActivity(getActivity(), SearchActivity.class); break; } } private View.OnTouchListener touchLis = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //按下 transactionFourCancelOrder.getBackground().setAlpha(50); break; case MotionEvent.ACTION_UP://抬起 transactionFourCancelOrder.getBackground().setAlpha(255); break; default: break; } return true; } }; private View.OnTouchListener touchLiss = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //按下 transactionFourRefresh.getBackground().setAlpha(50); break; case MotionEvent.ACTION_UP://抬起 transactionFourRefresh.getBackground().setAlpha(255); break; default: break; } return true; } }; ```
Android Studio代码哪儿有错吗?为什么运行APP老是闪退
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="180dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginStart="150dp" android:layout_marginLeft="150dp" android:layout_marginTop="100dp" android:text="用户登陆" android:textColor="@android:color/holo_blue_dark" android:textSize="30sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="90dp" android:orientation="horizontal"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@+id/editText1" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="35dp" android:layout_marginStart="35dp" android:text="用户名" android:textSize="25sp" /> <EditText android:id="@+id/editText1" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="40dp" android:layout_marginStart="40dp" android:text="" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="90dp" android:orientation="horizontal"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@+id/editText2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="35dp" android:layout_marginStart="35dp" android:text="密码" android:textSize="25sp" /> <EditText android:id="@+id/editText2" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="66dp" android:layout_marginStart="66dp" android:text="" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="90dp" android:orientation="horizontal"> <Button android:id="@+id/button5" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="80dp" android:layout_marginStart="80dp" android:text="登陆" /> <Button android:id="@+id/button4" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="45dp" android:layout_marginStart="45dp" android:text="注册" /> </LinearLayout> </LinearLayout>
px到dp和dp到px的转换问题
我在计算一个像素的变换量,然后想定义独立的像素密度。格式如下: (px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160)); 但是不能运行,显示的不能被0整除. 我用如下方法实现dp到px的转换: px = (int)(dp * (displayMetrics.densityDpi / 160)); 大家能给我点指点吗?不胜感激。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了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 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问