-2

J2ME (blackberry デバイス用) で作成されたプロジェクトを割り当てられました。このプロジェクトでは、クライアントのデータベースにクエリを実行するために元の asp ファイルを使用します。アイデアは、この J2ME プロジェクトを Android に移行することです。

問題は、プロジェクトでこれらの asp ファイルを使用する方法が見つからないことです (これらのファイルは大量のファイルであるため、これらのファイルを別の言語に変更するつもりはありません)。これには J2ME クラスが使用されているためです。 、そして私はプロジェクトを作り直していますが、アンドロイドを使用しています。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;
}

}

4

1 に答える 1

0

ええと、クライアント J2ME コードは HTTP を介してバックエンド ASP と通信し、SAX パーサーを使用して強く型付けされたオブジェクトに抽出するため、おそらく XML であるペイロードを転送します。

これを念頭に置いて、バックエンド コードで何も変更する必要はありません。Android でサポートされている XML シリアル化メカニズムのいずれかを使用して、既存のクライアント コードを取得し、接続を確立してユーザーを認証する部分などを保持し、リクエスト ペイロードをシリアル化する部分または応答ペイロードを逆シリアル化する部分を置き換えることができます。クラスを使用することをお勧めしますSAXParser。これにより、必要な変更が最小限に抑えられます。

生成する必要がある実際の厳密に型指定されたクラスについては、それらを POJ (plain old Java) として定義し、XML から抽出されたデータを取得してそれらに詰め込むコンストラクターを作成できます。

派手になりたいが、根本的な変更を恐れていない場合は、非常に柔軟で強力なJackson を入手して、その注釈ベースのデータバインディング サポートを使用することをお勧めします。

于 2012-10-11T16:54:24.487 に答える