0

私のアプリには次のクラスがあります。

  1. NewsApp.java
  2. ScreenApp.java
  3. Item.java
  4. ui / TableList.java

アプリはWebサービス(.net)からリンクのリストを取得します。私はKSoapライブラリを使用します(参照プロジェクトとして)。

EclipseではListFieldクラスのメソッド"setRowHeight(index、int)"を使用できないため、開発にはJDE 4.5を使用します。次に、JDE4.5を使用する必要があります。

はい、アプリをコンパイルし(F7キー)、シミュレーターで実行します(F5キー)。シミュレーターで、アイコンアプリに移動し、開こうとします...何も起こりません...アプリが開かない...奇妙です...エラーメッセージがありません(ScreenApp.java 57行目)...しかし...さらに数分すると...エラーメッセージが表示されます(ScreenApp.java 57行目)...アプリが接続を試みたことが原因である可能性があります...

後で...シミュレーターにインターネット接続が存在しないためだと思います(シミュレーターの上部にEDGEが表示されます...奇妙です)、シミュレーターを停止し、MDSを開いて、シミュレーターを再度実行します(F5キー)。動作します...リストは正しく表示されます...そしてブラックベリーブラウザでリンクを開くことができます。

今...私はすべてのコンパイルされたファイルを同じディレクトリに置き、ALXファイルを作成します:

  1. NewsApp.alx そして、このアプリをデバイスにインストールします。インストールは正常に機能します。デバイス上のアプリケーションのリスト(8520)に移動し、アプリを開くと、接続メッセージ(ScreenApp.java 57行目)が表示されます。理由がわかりませんか?この電話(8520)では、キャリアとEDGE接続があり、WIFIがアクティブになっています...どのページでも閲覧できます(デフォルトのブラウザ)...しかし、アプリはWebサービスから情報を取得できません... :(

誰か助けてくれませんか?

4

1 に答える 1

0

アプリケーションをデバイスで実行する場合は、URLの最後に異なる接続パラメーターを使用する必要があります。

例:Wi-Fiの場合は、URLの最後に; interface=wifi"を追加する必要があります。

詳細コードは次のとおりです。デバイスネットワークに従って接続サフィックスを取得するには、getConnectionString()を呼び出す必要があります。これで問題が解決することを願っています。

/** 
   * @return connection string 
   */
  static String getConnectionString()
  {
      // This code is based on the connection code developed by Mike Nelson of AccelGolf.
      // http://blog.accelgolf.com/2009/05/22/blackberry-cross-carrier-and-cross-network-http-connection        
      String connectionString = null;                

      // Simulator behavior is controlled by the USE_MDS_IN_SIMULATOR variable.
      if(DeviceInfo.isSimulator())
      {            
          // logMessage("Device is a simulator and USE_MDS_IN_SIMULATOR is true");
          connectionString = ";deviceside=true";                           
      }                                        

      // Wifi is the preferred transmission method
      else if(WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED)
      {
         // logMessage("Device is connected via Wifi.");
          connectionString = ";interface=wifi";
      }

      // Is the carrier network the only way to connect?
      else if((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT)
      {
          //logMessage("Carrier coverage.");

          String carrierUid = getCarrierBIBSUid();
          if(carrierUid == null) 
          {
              // Has carrier coverage, but not BIBS.  So use the carrier's TCP network
             // logMessage("No Uid");
              connectionString = ";deviceside=true";
          }
          else 
          {
              // otherwise, use the Uid to construct a valid carrier BIBS request
             // logMessage("uid is: " + carrierUid);
              connectionString = ";deviceside=false;connectionUID="+carrierUid + ";ConnectionType=mds-public";
          }
      }                

      // Check for an MDS connection instead (BlackBerry Enterprise Server)
      else if((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS)
      {
         // logMessage("MDS coverage found");
          connectionString = ";deviceside=false";
      }

      // If there is no connection available abort to avoid bugging the user unnecssarily.
      else if(CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE)
      {
          //logMessage("There is no available connection.");
      }

      // In theory, all bases are covered so this shouldn't be reachable.
      else
      {
          //logMessage("no other options found, assuming device.");
          connectionString = ";deviceside=true";
      }        

      return connectionString;
  }
  /**
   * Looks through the phone's service book for a carrier provided BIBS network
   * @return The uid used to connect to that network.
   */
  private static String getCarrierBIBSUid()
  {
      ServiceRecord[] records = ServiceBook.getSB().getRecords();
      int currentRecord;

      for(currentRecord = 0; currentRecord < records.length; currentRecord++)
      {
          if(records[currentRecord].getCid().toLowerCase().equals("ippp"))
          {
              if(records[currentRecord].getName().toLowerCase().indexOf("bibs") >= 0)
              {
                  return records[currentRecord].getUid();
              }
          }
      }

      return null;
  }
于 2011-09-19T12:57:00.707 に答える