HttpConnection not working in real device -Blackbe

2020-03-30 05:53发布

问题:

this is my code

public String Serverconnection(String url) {

    String line = "";

    if (DeviceInfo.isSimulator()) {
        url = url + ";deviceSide=true";
    }
    try {
        HttpConnection s = (HttpConnection) Connector.open(url);//*i get the exception here*
        s.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        s.setRequestProperty(
                "Accept",
                "text/html,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
        s.setRequestProperty(HttpHeaders.HEADER_ACCEPT_CHARSET, "UTF-8");
        s.setRequestMethod(HttpConnection.GET);
        InputStream input = s.openInputStream();
        byte[] data = new byte[10240];
        int len = 0;
        StringBuffer raw = new StringBuffer();

        while (-1 != (len = input.read(data))) {
            raw.append(new String(data, 0, len));
        }

        line = raw.toString();

        input.close();
        s.close();
    } catch (Exception e) {
        System.out.println("response--- excep" + line + e.getMessage());
    }
    return line;

}

this code working fine when i run in the emulator. But in the real device i got the Exception "details unavailable - not supported by VM" "APN is not specified."

How can I fix this?

回答1:

refer to the knowledge center article "Different ways to make an HTTP or socket connection"

Append the connection string to your url.Then try

private static String getConnectionString(){
String connectionString="";
if(WLANInfo.getWLANState()==WLANInfo.WLAN_STATE_CONNECTED){
    connectionString="?;interface=wifi";
}

else if((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS){
     connectionString = "?;&deviceside=false";
}
else if((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT)==CoverageInfo.COVERAGE_DIRECT){
    String carrierUid=getCarrierBIBSUid();
    if(carrierUid == null) {
        connectionString = "?;deviceside=true";
    }
    else{
        connectionString = "?;deviceside=false?;connectionUID="+carrierUid + "?;ConnectionType=mds-public";
    }               
}
else if(CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) {          
        }
    return connectionString;
}

Edit : -

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;
}