有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从一个活动访问另一个类的用户输入?

在我的Android Studio项目中,我有一个名为ParticleActivity的活动

public class ParticleActivity extends AppCompatActivity  {

public final static String EXTRA_MESSAGE = "pso.algo.MESSAGE";
private ProgressDialog pd;
private double[] results = {-1.0, -1.0, -1.0};
EditText particles = (EditText) findViewById(R.id.particles);
EditText iterations = (EditText) findViewById(R.id.iterations);
static EditText solution;
public static double userSolution = Double.parseDouble(solution.getText().toString());
static EditText battery;
public static double batteryLevel = Double.parseDouble(battery.getText().toString());

声明了userSolutionbatteryLevel,以便另一个类customUseCase可以访问这些字段中的用户输入

public class CustomUseCase extends Test {

public ArrayList<Double> costData = MainActivity.costDATA; //costs that the user enters for each resource
public ArrayList<Double> costWlan = MainActivity.costWLAN;
public ArrayList<Double> costUtilities = MainActivity.costUTILITY;
public double batteryCost = ParticleActivity.batteryLevel; //battery cost user enters
public double userSolution = ParticleActivity.userSolution; //user's predicted solution
private int maxIter;
private int noParticles;

我知道这不是一种编写代码的好方法,因为它在Android Studio上说我会出现内存泄漏,因为Android组件不应该声明为静态变量。但这是唯一的方法(从我对Android的一点了解来看),我可以考虑从ParticleActivity中的EditText字段访问用户输入,以便在我的customUseCase类中使用。有人能给我一个好方法我可以写出来吗?谢谢


共 (2) 个答案

  1. # 1 楼答案

    我理解您试图将值传递给非活动,但意图不起作用。 为什么不使用共享首选项来存储和更新值呢

    Setting values in Preference:

     // MY_PREFS_NAME - a static String variable like: 
     public static final String MY_PREFS_NAME = "MyPrefsFile";
     SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
     editor.putString("userSolution", "test");
     editor.putInt("batteryLevel", 12);
     editor.commit();
    

    Retrieve data from preference:

     SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
     String name = prefs.getString("userSolution", null);//"null" is the default value.
     int idName = prefs.getInt("batteryLevel", 0); //0 is the default value.
    
  2. # 2 楼答案

    尝试使用Intent类及其putExtra方法 看到这里的文档了吗 https://developer.android.com/reference/android/content/Intent.html

    示例用法

    Intent i = new Intent(ParticleActivity.this,CustomUseCase.class)
                         i.putExtra("myShow","one");
    

    然后在你的CustomUseCase课程上

    Intent i=getIntent();
    String show=i.getStringExtra("myShow");