[英]Using a class without creating a new instance of it
對Java不熟悉,對Android開發又不陌生。
我遵循了以下教程-Android教程(Basic Hello World App) ,現在我將其稍作更改以作為概念證明。
基本上,我想使用自己創建的類,但是遇到一些困難。 該類如下所示。
public class Employee {
private HashMap<String, String> employees = new HashMap<>();
public void setEmployees(String name, String jobTitle) {
employees.put(name, jobTitle);
System.out.println(employees);
}
public String getEmployees(String name){
return employees.get(name);
}
}
我從MainActivity.java
填充HashMap
。 使用上面的set方法,這可以按預期工作。 我已經對其進行了測試,並且可以看到HashMap具有所需的條目數。
我的問題是取回數據時。 我如何使用課程。 我有一個文件名DisplayMessageActivity.java
和其中的以下代碼。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class DisplayMessageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
// Capture the layout's TextView and set the string as its text
TextView employee_name = findViewById(R.id.employee_Name);
employee_name.setText(message);
TextView employee_title = findViewById(R.id.employee_Title);
employee_title.setText(employee.getEmployees(message));
}
}
最后一行是我得到錯誤的地方。 這是因為它不知道employee
是什么。 我想我需要添加:
Employee employee = new Employee;
如果將其添加到onCreate
方法中,它將創建一個新實例,因此具有新值。 我也將其添加到onCreate
之上,具有相同的結果。
我想念什么?
要保留數據,您需要將變量和方法設為靜態
public class Employee {
private static HashMap<String, String> employees = new HashMap<>();
public static void setEmployees(String name, String jobTitle) {
employees.put(name, jobTitle);
System.out.println(employees);
}
public static String getEmployees(String name){
return employees.get(name);
}
}
這意味着一次只能存在一個版本。 您將直接調用類和方法。
employee_title.setText(Employee.getEmployees(message))
用下面的代碼替換您的Employee類代碼
public class Employee {
private static HashMap<String, String> employees;
public Employee() {
if (employees == null) {
employees = new HashMap<>();
}
}
public void setEmployees(String name, String jobTitle) {
employees.put(name, jobTitle);
System.out.println(employees);
}
public String getEmployees(String name) {
return employees.get(name);
}
}
希望對您有幫助。
您可以使用Singleton in-memory cache
來保留您的員工。
public class Employee {
private static sInstance;
private HashMap<String, String> employees = new HashMap<>();
private Employee(){
// No instance available
}
public static synchronized Employee getInstance(){
if(sInstance == null){
sInstance = new Employee();
}
return sInstance;
}
public void setEmployees(String name, String jobTitle) {
employees.put(name, jobTitle);
System.out.println(employees);
}
public String getEmployees(String name){
return employees.get(name);
}
}
稍后,您可以使用內存緩存,如下所示:
Employee.getInstance().getEmployees(message);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.