2013-03-19 228 views
2

我想创建一个包含从服务器登录和注销的函数的类,服务器的IP地址在函数的开头以静态方式定义,如下所示:java:变量初始化

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", "[email protected]", "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新不关心,如果功能或variavble是静态的还是没有,所有的我想要的是通过条件初始化IP地址。我把这个类的功能称为evry其他类,所以在evry类中做测试是不礼貌的。 IM保留,作为最后的手段

+2

单独从调用方法发送IP地址并追加其余静态条带克到它。不需要任何检查。 – SudoRahul 2013-03-19 03:23:33

+2

这没有意义 - 您正在更新基于实例方法结果的静态字符串。 – Adrian 2013-03-19 03:26:25

回答

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改性剂的使用量的声明中要求这是情况)。

字段不能有条件地声明。如果事实上,大多数陈述(如果,等等等)在功能之外是非法的。唯一可以在类体中静态执行的是声明该字段并为其赋予初始化值。现在

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

,这是非常困难的,因为阿德里安指出,您要使用非静态方法(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. 
    } 
0

所有我要做的就是用这种方法初始化构造函数中的变量:

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