Starmicronics Android SDK库无法运行
我已经尝试解决这个问题好几天了,但仍然没有解决它。。。请有人能帮我 我目前正在尝试开发一款应用程序,它的功能与starmicronic应用程序相同。您可以在下面找到SDK 开始时,我只是将Jar库StarIOPort3.1.Jar复制到工作区中,然后导入Main.java 我试图将此函数复制到我的主类中,但一开始我没有在清单设置中添加internet权限。在添加internet权限后,我仍然得到一个运行时执行项E/AndroidRuntime(776):java.lang.IllegalStateException:无法执行活动的方法 但它与Star SDK配合得很好。。。但不是在我的版本中Starmicronics Android SDK库无法运行,android,sdk,android-manifest,Android,Sdk,Android Manifest,我已经尝试解决这个问题好几天了,但仍然没有解决它。。。请有人能帮我 我目前正在尝试开发一款应用程序,它的功能与starmicronic应用程序相同。您可以在下面找到SDK 开始时,我只是将Jar库StarIOPort3.1.Jar复制到工作区中,然后导入Main.java 我试图将此函数复制到我的主类中,但一开始我没有在清单设置中添加internet权限。在添加internet权限后,我仍然得到一个运行时执行项E/AndroidRuntime(776):java.lang.IllegalSta
public void PortDiscovery(View view)
{
List<PortInfo> BTPortList;
List<PortInfo> TCPPortList;
final EditText editPortName;
final ArrayList<PortInfo> arrayDiscovery;
ArrayList<String> arrayPortName;
arrayDiscovery = new ArrayList<PortInfo>();
arrayPortName = new ArrayList<String>();
try {
BTPortList = StarIOPort.searchPrinter("BT:");
TCPPortList = StarIOPort.searchPrinter("TCP:");
for (PortInfo portInfo : BTPortList) {
arrayDiscovery.add(portInfo);
}
for (PortInfo portInfo : TCPPortList) {
arrayDiscovery.add(portInfo);
}
arrayPortName = new ArrayList<String>();
for(PortInfo discovery : arrayDiscovery)
{
String portName;
portName = discovery.getPortName();
if(discovery.getMacAddress().equals("") == false)
{
portName += "\n - " + discovery.getMacAddress();
if(discovery.getModelName().equals("") == false)
{
portName += "\n - " + discovery.getModelName();
}
}
arrayPortName.add(portName);
}
} catch (StarIOPortException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
editPortName = new EditText(this);
new AlertDialog.Builder(this)
.setIcon(R.drawable.icon)
.setTitle("Please Select IP Address or Input Port Name")
.setView(editPortName)
.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int button)
{
EditText portNameField = (EditText)findViewById(R.id.editText_PortName);
portNameField.setText(editPortName.getText());
SharedPreferences pref = getSharedPreferences("pref", MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);
Editor editor = pref.edit();
editor.putString("portName", portNameField.getText().toString());
editor.commit();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int button)
{
}
})
.setItems(arrayPortName.toArray(new String[0]), new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int select)
{
EditText portNameField = (EditText)findViewById(R.id.editText_PortName);
portNameField.setText(arrayDiscovery.get(select).getPortName());
SharedPreferences pref = getSharedPreferences("pref", MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);
Editor editor = pref.edit();
editor.putString("portName", portNameField.getText().toString());
editor.commit();
}
})
.show();
}
public void端口发现(视图)
{
列表BTPortList;
列表TCPPortList;
最终编辑文本编辑端口名;
最终阵列列表阵列发现;
ArrayList arrayPortName;
arrayDiscovery=新的ArrayList();
arrayPortName=新的ArrayList();
试一试{
BTPortList=StarIOPort.searchPrinter(“BT:”);
TCPPortList=StarIOPort.searchPrinter(“TCP:”);
对于(PortInfo PortInfo:BTPortList){
arrayDiscovery.add(portInfo);
}
for(PortInfo-PortInfo:TCPPortList){
arrayDiscovery.add(portInfo);
}
arrayPortName=新的ArrayList();
用于(PortInfo发现:arrayDiscovery)
{
字符串端口名;
portName=discovery.getPortName();
if(discovery.getMacAddress().equals(“”==false)
{
portName+=“\n-”+发现.getMacAddress();
if(discovery.getModelName().equals(“”==false)
{
portName+=“\n-”+discovery.getModelName();
}
}
arrayPortName.add(端口名);
}
}捕获(StarIOPortException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
editPortName=新的EditText(此);
新建AlertDialog.Builder(此)
.setIcon(R.drawable.icon)
.setTitle(“请选择IP地址或输入端口名”)
.setView(editPortName)
.setPositiveButton(“确定”,新的DialogInterface.OnClickListener()
{
公共void onClick(对话框接口对话框,int按钮)
{
EditText端口名字段=(EditText)findViewById(R.id.EditText\u端口名);
portNameField.setText(editPortName.getText());
SharedReferences pref=GetSharedReferences(“pref”,模式世界可读,模式世界可写);
编辑器编辑器=pref.edit();
putString(“portName”,portNameField.getText().toString());
commit();
}
})
.setNegativeButton(“取消”,新建DialogInterface.OnClickListener())
{
公共void onClick(对话框接口对话框,int按钮)
{
}
})
.setItems(arrayPortName.toArray(新字符串[0]),新的DialogInterface.OnClickListener()
{
公共void onClick(对话框接口对话框,int-select)
{
EditText端口名字段=(EditText)findViewById(R.id.EditText\u端口名);
portNameField.setText(arrayDiscovery.get(select.getPortName());
SharedReferences pref=GetSharedReferences(“pref”,模式世界可读,模式世界可写);
编辑器编辑器=pref.edit();
putString(“portName”,portNameField.getText().toString());
commit();
}
})
.show();
}
确定如果查看stacktrace中的其他异常,您可以看到它得到一个NetworkOnMainThread异常。这意味着您需要在启动搜索打印机的代码之前退出主UI线程。您可以创建线程或使用任务
答案有一个很好的例子,其中有一个简单的任务,你可以根据自己的目的进行调整。因此,为了更清楚,我认为调用PortDiscovery()方法的代码需要在任务中
安卓给出这个例外的原因是,尝试网络操作可能需要几分钟时间,然后失败。这会在那个时候锁定整个UI,因此不是一个好的做法
根据这一例外情况,Android 3.0引入了这一例外。您提到的Starmicronics网站上的Android项目的默认构建目标为7(即Android 2.1)。可能是新的示例eclipse项目具有更高的构建目标,或者运行配置在模拟器中更高版本的Android上运行。您可以在:project.properties和default.properties文件中对此进行检查。我已经使用一些日志进行了测试,程序将在方法BTPortList=StarIOPort.searchPrinter(“BT:”)中给出运行时错误;TCPPortList=StarIOPort.searchPrinter(“TCP:”);此外,我试图在另一个项目中运行,但它不起作用。但是如果我在不同类的同一个项目(StarSDK)上创建它,它就可以工作了。我想是因为配置问题,但制造商没有明确说明。例如,制造商没有在manifest.xml中包含internet权限设置。因此,有谁能帮我们解决这个问题吗?你能给我们提供更多的信息吗?非法州例外发生在哪里?你有stacktrace吗?嗨,哈克,我不知道你是什么意思,我在这个领域很新。这里是一个示例,两个项目运行在同一代码上,但一个出现运行时错误,另一个(StarIOSDK)运行正常。我想这更像是一个配置问题。我不确定应该提供什么信息,请让我知道我可以为您获得什么,我会尽快这样做。当您在eclipse中运行应用程序时,如果您转到DDMS透视图,会有一个LogCat选项卡。调试输出转到LogCat选项卡。我希望看到整个错误,并尝试猜测可能出现的错误。谢谢你继续。我试过你告诉我的方法,