2013-03-11 3 views
0

Я пытался исправить эту проблему в течение нескольких дней и все равно не смог ее исправить ... Пожалуйста, кто-то может мне помочь.Библиотека Android SDK Starmicronics не работает

В настоящее время я пытаюсь разработать приложения, которые выполняют ту же функцию с тем, что делает starmicronic. И вы можете найти SDK ниже.

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

В начале я просто скопировать Jar библиотеки StarIOPort3.1.Jar в рабочее пространство, а импорт в Main.java

Я попытался скопировать эту функцию в мой основной класс, но в сначала я пропустил, чтобы добавить разрешение Интернета в настройке манифеста. После добавления разрешения на Интернет я все еще получаю exeception времени выполнения 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

+0

Кроме того, я попытался запустить в отдельном проекте, это не сработало. Но если я создам его в том же проекте (StarSDK) в другом классе, и он работает. Я думаю, что это связано с проблемой конфигурации, но производитель не дал понять. Например, производитель не включил настройку разрешения Интернета в файле manifest.xml. Таким образом, сможет ли кто-нибудь помочь в этом? – Frank

+0

Можете ли вы дать нам немного больше информации? Где встречается незаконноеStateException? У вас есть стек? –

ответ

0

OK Если вы посмотрите на другие исключения в StackTrace вы можете увидеть, что он получает NetworkOnMainThreadException. Это означает, что вам нужно выйти из основного потока пользовательского интерфейса, прежде чем запускать код, который ищет принтеры. Вы можете создать поток или использовать задачу.

Ответ на this SO question имеет хороший пример с простой задачей, которую вы могли бы адаптировать для своей цели. Поэтому, чтобы сделать его более ясным, я думаю, что код, вызывающий методы PortDiscovery(), должен находиться в Задаче.

Причина, по которой Android дает это исключение, заключается в том, что для попытки сетевой операции может потребоваться несколько минут, а затем сбой. Это заблокировало бы весь пользовательский интерфейс за это время и, следовательно, не является хорошей практикой.

Согласно this post это исключение было представлено в Android 3.0. Проект Android на веб-сайте Starmicronics, о котором вы упоминаете, имеет цель построения по умолчанию 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

+0

Я могу видеть SearchPrinter метод вызывает Звездную библиотеку и указывает (Неизвестный источник). Я добавил файл библиотеки Jar в проект. Интересно, в чем причина? – Frank

+0

Если два проекта действительно имеют одинаковый исходный код, то проверьте файлы .project и .classpath в каталоге верхнего уровня каждого проекта. Они практически идентичны? Сравните файлы AndroidManaifest.xml и project.properties. Кроме того, вы можете перейти в Project | Недвижимость | Java Build Path и сравните то, что находится на каждой вкладке. –

Смежные вопросы