2009-08-10 9 views
2

Nous avons une application qui utilise le format XML pour charger les données sur le périphérique BB 8900. Tout fonctionne bien sur simulateur, toutes les données pertinentes. Mais sur l'appareil nous obtenons une page noire et rien ne se charge. Quelqu'un peut-il nous aider à trouver le problème? Peut-être que c'est parce que nous ne signons pas l'application?L'application Blackberry charge les données depuis Internet sur le simulateur, mais rien ne charge sur le périphérique.

Nous avons réussi à charger des données uniquement après avoir défini APN dans les paramètres réseau de l'appareil. Toutes les applications natives et téléchargées travaillaient auparavant sans paramètres APN, pourquoi notre application n'a-t-elle pas chargé les données sans APN?

+0

en utilisant api non signé résout dans le message d'erreur, donc probablement ses autorisations de connexion ou d'application. quel genre de connexion utilisez-vous? utilisez-vous BES? –

Répondre

2

Malheureusement, la "réponse" à cette question est "la mise en réseau est difficile sur le BlackBerry". Cependant, il existe de très bonnes ressources pour vous aider à atteindre rapidement vos objectifs. Voici un post sur les forums de développeurs tout au sujet des connexions réseau et les différentes façons d'accomplir votre tâche:

http://supportforums.blackberry.com/rim/board/message?board.id=java_dev&message.id=29103&query.id=48702#M29103

De plus, un développeur BlackBerry accompli a affiché une classe utilitaire très bien que vous voudrez peut-être d'essayer d'utiliser à l'épreuve des balles vos connexions plus:

http://www.versatilemonkey.com/blog/index.php/2009/06/24/networking-helper-class/

+0

Où avez-vous eu l'idée que le réseautage est difficile sur la mûre? c'est facile comme un diable :) –

+0

Haha, j'ai eu cette idée assez naïve pour penser que ça allait être facile avec ma première application. ;) – Eric

+0

Votre premier lien est cassé – Casebash

0

Je sais que ce fil est fermé depuis longtemps, mais pensé laisser tomber cette Incase quelqu'un a besoin là-bas un jour. Ce problème a vraiment ralenti mon développement pendant des heures et j'ai donc jugé bon de le partager. Je vais fournir deux méthodes qui aideront à vérifier l'appareil et utiliser le transport approprié disponible. Pour utiliser cette méthode, appelez simplement la méthode getConnectionString et ajoutez-la à la fin de votre chaîne d'URL et vous êtes prêt à partir.

//the method returns the connection string 
public String getConnectionString() 
{   
    String connectionString = "";     

    if(DeviceInfo.isSimulator()) 
    { 
     if(true)// toggle between true and false to enable simulator use mds 
     { 
     // Log.i(TAG, "Device is a simulator and USE_MDS_IN_SIMULATOR is true"); 
      connectionString = ";deviceside=false";     
     } 
     else 
     { 
     // Log.i(TAG, "Device is a simulator and USE_MDS_IN_SIMULATOR is false"); 
      connectionString = ";deviceside=true"; 
     } 
    }           

    // Wifi is the preferred transmission method 
    else if(WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) 
    { 
    // Log.i(TAG, "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) 
    { 
//  Log.i(TAG, "Carrier coverage."); 

     String carrierUid = getCarrierBIBSUid(); 
     if(carrierUid == null) 
     { 
      // Has carrier coverage, but not BIBS. So use the carrier's TCP network 
     // Log.i(TAG, "No Uid"); 
      connectionString = ";deviceside=true"; 
     } 
     else 
     { 
      // otherwise, use the Uid to construct a valid carrier BIBS request 
     // Log.i(TAG, "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) 
    { 
//  Log.i(TAG, "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) 
    { 
//  Log.i(TAG, "There is no available connection."); 
    } 

    // In theory, all bases are covered so this shouldn't be reachable. 
    else 
    { 
     // Log.i(TAG, "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. This is called from getConnectionString() 
*/ 
private 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; 
} 

Exemple d'utilisation se trouve ci-dessous:

String url = "specific url"+getConnectionString(); 
HttpConnection connection = (HttpConnection)Connector.open(url, Connector.READ, true); 

Cette méthode est la preuve complète et a été testé sur plusieurs appareils, donc je pensais que de le mettre dans un format concis ici. Bonne chance

Questions connexes