在Eclipse中新建多个类

lb_101888 2018-08-03 05:49:55
USB Host 通信的代码,在单个 .java中连接成功并可以进行读取信息。现在应老板要求,需要拆分为多个类进行单独管理。结构如下:
1.MainActivity.java 主UI界面
2.JoyStickMgr.java 管理USB操作
3.USBOperation.java 连接USB的相关操作
4.USBInputDesc.java 将读取到数据存入一个byte[]
5.USBParseAndWrite 解析读取到的数据并显示到主UI

主要是对java不怎么熟悉,这原来的代码也是下载研究好几天才走通的,我按照C语言的思路新建了对应的类,但是不知道新建的类是不是该这么写,还有怎么调用的问题。主界面只需要一个,无需跳转。每一步我加的 info.setText()就会导致程序崩溃,是不是调用的类也属于新的线程,没分了,求大佬支招,感激不尽。后面我贴出相关代码。


...全文
579 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guishuanglin 2019-12-23
  • 打赏
  • 举报
回复
引用 楼主 lb_101888 的回复:
USB Host 通信的代码,在单个 .java中连接成功并可以进行读取信息。现在应老板要求,需要拆分为多个类进行单独管理。结构如下: 1.MainActivity.java 主UI界面 2.JoyStickMgr.java 管理USB操作 3.USBOperation.java 连接USB的相关操作 4.USBInputDesc.java 将读取到数据存入一个byte[] 5.USBParseAndWrite 解析读取到的数据并显示到主UI 主要是对java不怎么熟悉,这原来的代码也是下载研究好几天才走通的,我按照C语言的思路新建了对应的类,但是不知道新建的类是不是该这么写,还有怎么调用的问题。主界面只需要一个,无需跳转。每一步我加的 info.setText()就会导致程序崩溃,是不是调用的类也属于新的线程,没分了,求大佬支招,感激不尽。后面我贴出相关代码。
java 与C+很接近的, 有些规则与C++一样的, 定义变量要给值才能用, 否则会出错info.setText() 你这个 info定义之后没有给实列, 到这里肯定就是空指针错误了. java里的对象/变量必须先给实例初始: Integer obj02 = 2; 基本类型比如 int类型有些地方默认为0, 但是并不是所有地方都是如此, 所以对于你不太明白时一句话: 变量尽量初始再用
qq_44373473 2019-12-23
  • 打赏
  • 举报
回复
1000从少到多
lb_101888 2018-08-03
  • 打赏
  • 举报
回复
MainActivity.java

package com.ivan.usbhostdemo;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
private Button mBtnOpen;
private Button mBtnRead;
private Button mBtnSend;
public TextView info;
public Handler mHandler;
private static final String ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION";
USBInputDesc mInputDesc = new USBInputDesc();
JoyStickMgr joystick = new JoyStickMgr();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBtnOpen = (Button)findViewById(R.id.btn_openDevice);
mBtnRead = (Button)findViewById(R.id.btn_read_message);
mBtnSend = (Button)findViewById(R.id.btn_send_message);
mBtnOpen.setOnClickListener(this);
mBtnRead.setOnClickListener(this);
mBtnSend.setOnClickListener(this);
// 获取UsbManager
// joystick.Initialize();

joystick.mUSBOperate.myUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE) ;
// PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
// IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);

// if (!joystick.mUSBOperate.myUsbManager.hasPermission(joystick.mUSBOperate.myUsbDevice)) {
// joystick.mUSBOperate.myUsbManager.requestPermission(joystick.mUSBOperate.myUsbDevice, pi);
// }
mHandler=new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
info.setText("result: " + msg);
}
};
}

@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn_openDevice :
joystick.OpenUsbDevice();
// Message msg = new Message();
// msg.obj = "ceshi";
// mHandler.sendMessage(msg);
break;
case R.id.btn_read_message :
joystick.Poll(mInputDesc);
break;
case R.id.btn_send_message :
joystick.WriteData();
break;
default :
break;
}
}

}
lb_101888 2018-08-03
  • 打赏
  • 举报
回复
USBOperation.java

package com.ivan.usbhostdemo;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Iterator;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbRequest;
import android.os.Message;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

public class USBOperation{
// private static final String ACTION_USB_PERMISSION =
// "com.android.example.USB_PERMISSION";
public UsbManager myUsbManager;
public UsbRequest myUsbRequest;
public UsbDevice myUsbDevice;
private UsbInterface myInterface;
private UsbDeviceConnection myDeviceConnection;
private UsbEndpoint epOut;
private UsbEndpoint epIn;
private EditText editText;


private final int mVendorID = 50018;
private final int mProductID = 11282;

byte[] data = new byte[64];

USBParseAndWrite mUSBParse;

public void SetParse(USBParseAndWrite usbParse)
{
mUSBParse = usbParse;
}
// public void Initialize()
// {
// try {
// myUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
// myUsbRequest = new UsbRequest();
// }catch(Exception e) {
// Log.e("TAG","Operate manager failed");
// }
// }
public void OpenUsbDevice() {
enumerateDevice();
findInterface();
getEndpoint();
openDevice();
}
public void enumerateDevice(){
// if (myUsbManager == null) {
// Log.e("TAG","myUsbManager is null");
// return;
// }
try {
HashMap<String, UsbDevice> deviceList = myUsbManager.getDeviceList();
Iterator<UsbDevice> iterator = deviceList.values().iterator();
while(iterator.hasNext()) {
UsbDevice device = iterator.next();
if (device.getVendorId() == mVendorID
&& device.getProductId() == mProductID)
{
myUsbDevice = device;
break;
}
}
}catch(Exception e) {
StringWriter stringWriter = new StringWriter();
e.printStackTrace(new PrintWriter(stringWriter));
Log.e("ClassActivity", "请插入设备!"
+ stringWriter.getBuffer().toString());
}
}
public void findInterface(){
// if(myUsbDevice == null){
// return;
// }
try {
for(int i = 0; i < myUsbDevice.getInterfaceCount();i++) {
UsbInterface intf = myUsbDevice.getInterface(i);

if (intf.getInterfaceClass() == 3
&& intf.getInterfaceSubclass() == 0
&& intf.getInterfaceProtocol() == 0) {
myInterface = intf;
}
}
}
catch(Exception e) {
StringWriter stringWriter = new StringWriter();
e.printStackTrace(new PrintWriter(stringWriter));
Log.e("ClassActivity", "未查找到设备接口!"
+ stringWriter.getBuffer().toString());
}
}
public void openDevice(){
// if (myInterface != null){
try {
UsbDeviceConnection conn = null;
// PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
// if (!myUsbManager.hasPermission(myUsbDevice)) {
// myUsbManager.requestPermission(myUsbDevice, pi);
// }
conn = myUsbManager.openDevice(myUsbDevice);
if(conn!=null&&conn.claimInterface(myInterface, true)) {
myDeviceConnection = conn;

}
}catch(Exception e) {
StringWriter stringWriter = new StringWriter();
e.printStackTrace(new PrintWriter(stringWriter));
Log.e("ClassActivity", "设备连接失败!"
+ stringWriter.getBuffer().toString());
}
}


private void getEndpoint() {
/*
#define USB_ENDPOINT_XFER_CONTROL 0 --控制传输
#define USB_ENDPOINT_XFER_ISOC 1 --等时传输
#define USB_ENDPOINT_XFER_BULK 2 --块传输 U盘
#define USB_ENDPOINT_XFER_INT 3 --中断传输 加密板
* */
try {
for (int i = 0; i < myInterface.getEndpointCount(); i++) {
UsbEndpoint ep = myInterface.getEndpoint(i);
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_INT) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
}
else {
epIn = ep;
}
}
}
}catch(Exception e){
StringWriter stringWriter = new StringWriter();
e.printStackTrace(new PrintWriter(stringWriter));
Log.e("ClassActivity", "端点分配失败!"
+ stringWriter.getBuffer().toString());
}
}
lb_101888 2018-08-03
  • 打赏
  • 举报
回复
这是UI界面


点击打开设备没什么反应,我也不知道该怎么添加消息了,用Handler Message 也会直接停止运行

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧