Starmicronics Android SDK Library无法运行

时间:2013-03-11 05:38:35

标签: android sdk android-manifest

我一直试图解决这个问题几天但仍然无法修复它......请有人帮助我。

我目前正在尝试开发与starmicronic应用程序具有相同功能的应用程序。你可以在下面找到SDK。

http://www.starmicronics.com/support/ZipFile.aspx?sat2=195

一开始我只是将Jar Library StarIOPort3.1.Jar复制到工作区,然后导入到Main.java

我尝试将此功能复制到我的主课程中,但起初我错过了在Manifest设置中添加Internet权限。添加Internet权限后,我仍然得到E / AndroidRuntime(776)的运行时异常:java.lang.IllegalStateException:无法执行活动的方法。

但它适用于Star SDK ...但不适用于我的版本。

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();
}

1 个答案:

答案 0 :(得分:0)

确定如果查看堆栈跟踪中的其他异常,您会发现它收到NetworkOnMainThreadException。这意味着您需要在启动搜索打印机的代码之前离开主UI线程。您可以创建线程或使用任务。

this SO question的答案有一个很好的例子,一个简单的任务,你可以适应你的目的。所以为了更清楚,我认为调用PortDiscovery()方法的代码需要在一个Task中。

Android给出此异常的原因是,尝试网络操作可能需要几分钟才会失败。这将锁定整个UI,因此不是一个好习惯。

根据this post,Android 3.0中引入了此异常。您提到的Starmicronics网站上的Android项目默认构建目标为7(Android 2.1)。可能是新示例eclipse项目具有更高的构建目标,或者运行配置在模拟器中的更高版本的Android上运行。您可以在:project.properties和default.properties文件中进行检查。