2013-03-11 85 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