2

サーバーからログインおよびログアウトする関数を含むクラスを作成しようとしています。サーバーの IP アドレスは、次のように、関数の先頭で静的な方法で定義されています。

private static String loginURL = "http://192.168.1.5/android_login_api/"

条件に応じて loginURL を初期化する最善の方法を知りたいです。例えば:

if(this.isConnectedToServer("192.168.1.5", 500)) {
    private static String loginURL = "http://192.168.1.5/android_login_api/";
}

if(this.isConnectedToServer("192.168.1.9", 500)) {
    private static String loginURL = "http://192.168.1.9/android_login_api/";
}

このクラスのすべての関数にパラメーターとして loginURL を渡すことを考えました。それらを呼び出すときに、この条件を使用して IP アドレスを定義しますが、ばかげていると思います。

ここに私のクラスがあります:

public class UserFunctions {

private JSONParser jsonParser;

private static String loginURL = "http://192.168.1.5/android_login_api/";
private static String mplayerURL = "http://192.168.1.5/android_mplayer_api/";
private static String registerURL = "http://192.168.1.5/android_login_api/";

private static String login_tag = "login";
private static String register_tag = "register";
private static String delete_tag = "delete";
private static String update_tag = "update";
private static String music_tag = "music";
private static String getusers_tag = "getusers";


// constructor
public UserFunctions(){
    jsonParser = new JSONParser();
}

/**
 * function make Login Request
 * @param email
 * @param password
 * */
public JSONObject loginUser(String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    Log.i("JSON", json.toString());
    return json;
}
public JSONObject deleteUser(String email){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", delete_tag));
    params.add(new BasicNameValuePair("email", email));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    Log.i("JSON", json.toString());
    return json;
}

public JSONObject updateUser(String email, String field, String value){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", update_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("field", field));
    params.add(new BasicNameValuePair("value", value));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    Log.i("JSON", json.toString());
    return json;
}



public boolean isConnectedToServer(String url, int timeout) {
    try{
        URL myUrl = new URL(url);
        URLConnection connection = myUrl.openConnection();
        connection.setConnectTimeout(timeout);
        connection.connect();
        return true;
    } catch (Exception e) {
        // Handle your exceptions
        return false;
    }
}

/**
 * function make Login Request
 * @param name
 * @param email
 * @param password
 * */
public JSONObject registerUser(String name, String email, String mode, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", register_tag));
    params.add(new BasicNameValuePair("name", name));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("mode", mode));
    params.add(new BasicNameValuePair("password", password));

    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}

    public JSONObject PlayMusic(String name){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", "play"));
    params.add(new BasicNameValuePair("name", name));
    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(mplayerURL, params);
    // return json
    return json;
}

public JSONObject ChangeVol(String volume){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", "volume"));
    params.add(new BasicNameValuePair("volume", volume));
    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(mplayerURL, params);
    // return json
    return json;
}

public JSONObject StopMusic(){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", "stop"));
    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(mplayerURL, params);
    // return json
    return json;
}


public JSONObject ParcourirMusic(){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", "parcourir"));
    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(mplayerURL, params);
    // return json
    return json;
}


/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count > 0){
        // user logged in
        return true;
    }
    return false;
}

/**
 * Function to logout user
 * Reset Database
 * */
public boolean logoutUser(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    db.resetTables();
    return true;
}

public void ReadMail(){

try{
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "rami.mtiri@gmail.com", "pass");
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);


SearchTerm term = new SearchTerm() {
  @Override
  public boolean match(Message mess) {
    try {
      return mess.getContent().toString().toLowerCase().indexOf("boston") != -1;
    } catch (IOException ex) {
     // Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
    } catch (MessagingException ex) {
     // Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
    }
    return false;
  }
};

Message[] searchResults = inbox.search(term);
for(Message m:searchResults){
    Log.e("mail",m.getFrom()[0].toString() );
  System.out.println("MATCHED: " + m.getFrom()[0]);

}
} catch (Exception e) {

}

}

}

私のコードを使用して完全な解決策を教えてくださいUP、私はJavaの初心者です関数または変数が静的かどうかは気にしません。条件によってIPアドレスを初期化するだけです。このクラスの関数を他のすべてのクラスで呼び出すので、すべてのクラスでテストを行うのは失礼になります。私は最後の手段としてそれを保持しています

4

2 に答える 2

2

これ

if(this.isConnectedToServer("192.168.1.5", 500))
{
    private static String loginURL = "http://192.168.1.5/android_login_api/";
}
if(this.isConnectedToServer("192.168.1.9", 500))
{
    private static String loginURL = "http://192.168.1.9/android_login_api/";
}

上記のステートメントがクラスの宣言内にあると仮定すると、有効な Java コードではありません (private static修飾子を使用するには、これが必要です)。

フィールドは条件付きで宣言できません。実際、ほとんどのステートメント (if、while、for など) は、関数の外では不正です。クラス本体内で静的にできる唯一のことは、フィールドを宣言して初期化値を与えることです。

private static String loginURL; //no initialization yet as you don't have an instance to call isConnectedToServer() on

Adrian が指摘したように、非静的メソッド ( isConnectedToServer()) を使用して静的動作 ( の値) を決定しようとしているため、問題を解決するのは非常に困難loginURLです。これは意味がありません。loginURL非静的にするか、静的にする必要がありますisConnectedToServer()

おそらく、最初の最初のオプションが必要です。

初期化条件の性質上、loginURLコンストラクターで初期化する方が簡単です。これは、静的に初期化するのとほぼ同じです。以下は、そのような設定の骨子の例です。

class Example
{
     private String loginURL; //non-static, no initialization

     public Example()//construcutor
     {
           //run conditions normally
           if(this.isConnectedToServer("192.168.1.5", 500))
           {
                loginURL = "http://192.168.1.5/android_login_api/";
           }
           //you might want to use else if here
           if(this.isConnectedToServer("192.168.1.9", 500))
           {
                loginURL = "http://192.168.1.9/android_login_api/";
           }
           //if neither if starement executes, loginURL is null.
     }
}

何らかの理由で機能を静的にたい場合は、初期化コードを静的ブロックに移動します。

class StaticExample
{
     private static String loginURL;

     //isConnectedToServer must be declared static in order for this to work!
     //I believe your current function can be made static without changing its code
     public static boolean isConnectedToServer()
     {
        ...
     }

     static
     {
           if(isConnectedToServer("192.168.1.5", 500))
           {
                loginURL = "http://192.168.1.5/android_login_api/";
           }
           //you might want to use else if here
           if(isConnectedToServer("192.168.1.9", 500))
           {
                loginURL = "http://192.168.1.9/android_login_api/";
           }
           //if neither if starement executes, loginURL is null.
     }
于 2013-03-19T03:41:36.417 に答える
0

私がしなければならなかったのは、コンストラクターで var を次のように初期化することだけです。

private JSONParser jsonParser;

private static String loginURL = "/android_login_api/";
private static String mplayerURL = "/android_mplayer_api/";
private static String registerURL = "/android_login_api/";
public String ip;
private static String login_tag = "login";
private static String register_tag = "register";
private static String delete_tag = "delete";
private static String update_tag = "update";
private static String music_tag = "music";
private static String getusers_tag = "getusers";


// constructor
public UserFunctions(){
    jsonParser = new JSONParser();
    if(isConnectedToServer("192.168.1.5", 500)==false)
    {
        if(isConnectedToServer("www.google.com", 500)==true)
        {
            ReadEmails re = new ReadEmails();
            ip=re.processMail();
        }else{
            ip="192.168.1.5";
        }
    }else{
        ip="192.168.1.5";
    }
}
于 2013-03-24T23:52:03.927 に答える