Android Studio:editText 的吸气剂
Android Studio: Getters for editText
我想在另一个 activity 中使用 2 个 editTexts 的值。到目前为止,这是我的代码。我得到:
java.lang.NullPointerException.
代码:
public class AddJob extends AppCompatActivity{
// vars
private BottomNavigationView bottomNavigationView;
private EditText editTextLat, editTextLng;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_job);
TextView textView = findViewById(R.id.activityTitleAddJob);
textView.setText("Add a Job");
editTextLat = findViewById(R.id.editTextLat);
editTextLng = findViewById(R.id.editTextLng);
}
public int getLatitude() {
return new Integer(editTextLat.getText().toString());
}
public int getLongitude() {
return new Integer(editTextLng.getText().toString());
}
}
堆栈跟踪:
这是地图 class 中的代码片段:
AddJob aj = new AddJob();
int lat = aj.getLatitude();
int lng = aj.getLongitude();
Toast.makeText(aj, lat + " " + lng, Toast.LENGTH_LONG).show();
Please read about the Activity lifecycle. You should never
create an Activity directly with
new MyActivity()
这不会启动任何生命周期事件(onCreate
,等等...)或将其绑定到上下文,在其上设置视图层次结构,或执行任何常规 Activity 你可能期待的事情。您的程序返回 null,因为 onCreate
从未在 activity 上调用,如果您只是尝试自己调用它,它可能会崩溃。
如果您希望来自一个 activity 的数据在另一个 activity 中可用,实现此目的的一个简单方法是将 SharedPreferences 中的数据保存在 AddJob
activity(每当更新值时)并从 SharedPreferences
在 MapActivity
中访问它。您还可以通过在启动 Intent 时向 Intent 添加数据来将数据从一个 Activity 传递到下一个。
在此处使用 SharedPreferences 的一个优点是用户的选择将从一个应用程序会话保存到下一个应用程序会话,如果您有多个可以启动 MapActivity
的东西,它们不必一直传递那个数据。
你好,使用 Intent 不是更好吗
Intent i = new Intent(MainActivity.this, NEXTActivity.class);
i.putExtra("latitude", lat);
i.putExtra("longitude", lng);
startActivity(i);
NEXTActivity
Bundle extras = getIntent().getExtras();
double latitude = extras.getDouble("latitude");
double longitude = extras.getDouble("longitude");
您不应该创建 activity 对象,您可以使用 Intent 启动 activity 并通过它传递数据。查看下面link中的相关答案:
看来您正在实例化 AddJob
class。这可能会在 android 的 back-stack 上引发问题,这可能会产生生命周期管理问题。所以,正如@NoobAndroid 所提到的,最好使用推荐的方式,不要 运行 进入意外错误。
use this code .
package com.example.cloudanalogy.introscreen;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
private EditText editTextLat, editTextLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.activityTitleAddJob);
textView.setText("Add a Job");
editTextLat = findViewById(R.id.editTextLat);
editTextLng = findViewById(R.id.editTextLng);
}
public int getLatitude() {
return Integer.parseInt(editTextLat.getText().toString());
}
public int getLongitude() {
return Integer.parseInt(editTextLng.getText().toString());
}
public void onclick(View view) {
int lat = getLatitude();
int lng = getLongitude();
Toast.makeText(this, ""+lat+" and "+lng, Toast.LENGTH_SHORT).show();
}
}
我想在另一个 activity 中使用 2 个 editTexts 的值。到目前为止,这是我的代码。我得到:
java.lang.NullPointerException.
代码:
public class AddJob extends AppCompatActivity{
// vars
private BottomNavigationView bottomNavigationView;
private EditText editTextLat, editTextLng;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_job);
TextView textView = findViewById(R.id.activityTitleAddJob);
textView.setText("Add a Job");
editTextLat = findViewById(R.id.editTextLat);
editTextLng = findViewById(R.id.editTextLng);
}
public int getLatitude() {
return new Integer(editTextLat.getText().toString());
}
public int getLongitude() {
return new Integer(editTextLng.getText().toString());
}
}
堆栈跟踪:
这是地图 class 中的代码片段:
AddJob aj = new AddJob();
int lat = aj.getLatitude();
int lng = aj.getLongitude();
Toast.makeText(aj, lat + " " + lng, Toast.LENGTH_LONG).show();
Please read about the Activity lifecycle. You should never create an Activity directly with
new MyActivity()
这不会启动任何生命周期事件(onCreate
,等等...)或将其绑定到上下文,在其上设置视图层次结构,或执行任何常规 Activity 你可能期待的事情。您的程序返回 null,因为 onCreate
从未在 activity 上调用,如果您只是尝试自己调用它,它可能会崩溃。
如果您希望来自一个 activity 的数据在另一个 activity 中可用,实现此目的的一个简单方法是将 SharedPreferences 中的数据保存在 AddJob
activity(每当更新值时)并从 SharedPreferences
在 MapActivity
中访问它。您还可以通过在启动 Intent 时向 Intent 添加数据来将数据从一个 Activity 传递到下一个。
在此处使用 SharedPreferences 的一个优点是用户的选择将从一个应用程序会话保存到下一个应用程序会话,如果您有多个可以启动 MapActivity
的东西,它们不必一直传递那个数据。
你好,使用 Intent 不是更好吗
Intent i = new Intent(MainActivity.this, NEXTActivity.class);
i.putExtra("latitude", lat);
i.putExtra("longitude", lng);
startActivity(i);
NEXTActivity
Bundle extras = getIntent().getExtras();
double latitude = extras.getDouble("latitude");
double longitude = extras.getDouble("longitude");
您不应该创建 activity 对象,您可以使用 Intent 启动 activity 并通过它传递数据。查看下面link中的相关答案:
看来您正在实例化 AddJob
class。这可能会在 android 的 back-stack 上引发问题,这可能会产生生命周期管理问题。所以,正如@NoobAndroid 所提到的,最好使用推荐的方式,不要 运行 进入意外错误。
use this code .
package com.example.cloudanalogy.introscreen;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
private EditText editTextLat, editTextLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.activityTitleAddJob);
textView.setText("Add a Job");
editTextLat = findViewById(R.id.editTextLat);
editTextLng = findViewById(R.id.editTextLng);
}
public int getLatitude() {
return Integer.parseInt(editTextLat.getText().toString());
}
public int getLongitude() {
return Integer.parseInt(editTextLng.getText().toString());
}
public void onclick(View view) {
int lat = getLatitude();
int lng = getLongitude();
Toast.makeText(this, ""+lat+" and "+lng, Toast.LENGTH_SHORT).show();
}
}