2013-03-11 80 views
0

我一直试图解决这个问题几天,仍然无法解决它...请有人可以帮助我。Starmicronics Android SDK库无法运行

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

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

一开始我就在瓶子图书馆StarIOPort3.1.Jar复制到工作区,并导入到Main.java

我想这个功能复制到我的主类,但在首先,我错过了在Manifest设置中添加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(); 
} 
+0

我已经测试了一些日志程序会给出运行时错误的方法 BTPortList = StarIOPort.searchPrinter(“BT:”); TCPPortList = StarIOPort.searchPrinter(“TCP:”); – Frank 2013-03-11 05:39:50

+0

此外,我试图运行在单独的项目,它没有工作。但如果我在同一个项目(StarSDK)上创建不同的类并且它可以工作。我想是配置问题,但制造商没有说清楚。例如,制造商没有在manifest.xml中包含Internet权限设置。因此,任何人都可以帮助解决这个问题吗? – Frank 2013-03-11 06:18:29

+0

你能给我们多一点信息吗? illegalStateException发生在哪里?你有堆栈跟踪吗? – 2013-03-11 06:39:37

回答

0

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

对于this SO question的回答有一个很好的例子,它有一个简单的任务,可以适应您的目的。所以为了使它更清晰,我认为调用PortDiscovery()方法的代码需要位于任务中。

Android给出这个例外的原因是它可能需要几分钟时间来尝试网络操作,然后让它失败。这将锁定整个用户界面,因此不是一个好习惯。

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

+0

谢谢hack_on。我尝试了你告诉我的方法,但仍然无法工作。我理解它背后的逻辑,但在我看来,这是库配置问题。就好像我在manifest.xml文件中删除互联网权限一样,应用程序不会遇到任何应用程序错误。 此外,制造商STARSDK将使用相同的代码,因此我更关注设置方面的问题。我再次上​​传了LogCat,请让我知道如果你知道任何解决方法...感谢你的帮助这么多:) http://farm9.staticflickr.com/8227/8549808233_c7a838fbbd_b.jpg – Frank 2013-03-12 04:07:42

+0

我可以看到SearchPrinter方法调用Star Library并指向为(未知源)。我已经将库Jar文件添加到项目中。我想知道那是什么原因? – Frank 2013-03-12 04:21:57

+0

如果两个项目实际上具有相同的源代码,则检查每个项目顶级目录中的.project和.classpath文件。它们几乎完全相同吗?比较AndroidManaifest.xml文件和project.properties。另外,你可以进入Project |属性| Java Build Path并比较每个选项卡上的内容。 – 2013-03-12 08:03:48