我被分配了一个在J2ME(用于黑莓设备)中创建的项目,该项目使用原始的asp文件来查询客户端的数据库。我们的想法是将这个J2ME项目迁移到Android。
问题是我还没有找到在我的项目中使用这些asp文件的方法(我不打算将这些文件更改为另一种语言,因为它们是很多文件),因为它们使用了J2ME这个类,我有点重建项目,但有android;必须像现在一样保存asp文件。
我将在原始J2ME类中保留一些代码,asp名称为registerUser.asp,如果需要asp代码,我可以稍后发布。 谢谢。
HTTPConnections.java
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpConnection;
import org.xml.sax.SAXException;
public class HTTPConnections {
private static String URL_SERVER = "http://XX.XX.XXX.XXX";
private static String URL_BASE = "BB";
private static String URL_DIR = "BB";
private static String URL_REGISTER_USER = URL_SERVER+"/"+URL_BASE+"/"+URL_DIR+"/registerUser.asp";
public static boolean registerUser(String user, String password){
StreamConnection s = null;
PersistentStorage.database.setBD_AR__ID_TECNICO(0);
RegisterUserParser handler=null;
fin = getFinURL();
try {
s = (StreamConnection)Connector.open(URL_REGISTER_USER+"?u="+user+"&p="+password+";deviceside=true"+fin);
System.out.println(URL_REGISTER_USER+"?u="+user+"&p="+password+";deviceside=true"+";apn=web.iusacellgsm.mx");
HttpConnection httpConn = (HttpConnection)s;
int status = httpConn.getResponseCode();
System.out.println("El Status es: "+status);
PersistentStorage.database.setLog(PersistentStorage.database.getLog()+URL_REGISTER_USER+"?u=-"+user+"- p=-"+password+"- Status= "+status+"\n");
PersistentStorage.database.setLog(PersistentStorage.database.getLog()+"URL A LA BASE: "+URL_REGISTER_USER+"?u="+user+"&p="+password+"\n");
PersistentStorage.database.setLog(PersistentStorage.database.getLog()+"STATUS: "+status+"\n");
//Hector
PersistentStorage.database.setLog(PersistentStorage.database.getLog()+"El final del URL es: "+fin+"\n");
if (status == HttpConnection.HTTP_OK)
{
try {
InputStream input = s.openInputStream();
SAXParserImpl parser = new SAXParserImpl();
handler = new RegisterUserParser();
parser.parse(input, handler);
input.close();
} catch (SAXException e) {
//PersistentStorage.database.setLog(PersistentStorage.database.getLog()+"CATCH DEL SAX: "+e.getMessage()+"\n");
System.out.println("Error: 1 "+e.getMessage());
}
catch (IOException e){
System.out.println("Error: 500,000 "+e.getMessage());
handler = null;
}
PersistentStorage.database.setBD_AR__ID_TECNICO(handler.getIdTecnico());
}
s.close();
} catch (IOException e) {
PersistentStorage.database.setLog(PersistentStorage.database.getLog()+"CATCH 2: "+e.getMessage()+"\n");
System.err.println(e.toString());
System.out.println("Error: 2 "+e.getMessage());
}
if( handler!=null )
return true;
else
return false;
}
public static String getFinURL(){
String finURL = "", user ="", pass="";
String gSP = getServiceProvider();
if(gSP.equalsIgnoreCase("IUSACELL") && red.equalsIgnoreCase("CDMA")){
finURL = "";
}
else if(gSP.equalsIgnoreCase("IUSACELL") && !red.equalsIgnoreCase("CDMA")){
finURL=";apn=web.iusacellgsm.mx";
}
else if(gSP.equalsIgnoreCase("TELCEL GSM") && red.equalsIgnoreCase("GPRS")){
user=";TunnelAuthUsername=webgprs";
pass=";TunnelAuthPassword=webgprs2002";
finURL=";apn=internet.itelcel.com"+user+pass;
}
else if(gSP==null)
finURL = "Dio null";
else
finURL = "";
System.out.println("Mi URL es: "+finURL +" us: " + user+" pass: "+pass);
return finURL;
}
}
答案 0 :(得分:0)
嗯,客户端J2ME代码通过HTTP与后端ASP进行通信,传输有效负载(很可能是XML),因为它使用SAX解析器将其解压缩为强类型对象。
考虑到这一点,您不必在后端代码中进行任何更改。您可以使用现有的客户端代码,保留建立连接的部分,对用户进行身份验证等,并使用任何Android支持的XML序列化机制替换序列化请求有效负载的部分或反序列化响应有效负载。我建议您使用SAXParser
类,因为这样可以最大限度地减少您需要进行的更改。
对于需要生成的实际强类型类,可以将它们定义为POJ(普通旧Java),并创建构造函数,从XML中提取数据并将其填入其中。
如果你想要花哨,并且不怕彻底改变,我会建议你让杰克逊使用它annotation-based databinding support,因为它非常灵活和强大。