从一个类中获取 Intent 值并将 Intent 设置为另一个类
Posted
技术标签:
【中文标题】从一个类中获取 Intent 值并将 Intent 设置为另一个类【英文标题】:Getting Intent values from a class and set Intent to another class 【发布时间】:2021-08-16 17:06:08 【问题描述】:大家好,有人可以帮助我了解如何进行此过程吗?我只是想在一个按钮上进行测试。假设:
点击btnEasy1
后,会进入ButtonFunctions
类,对GameActivity
类进行必要的设置。
PS。我现在只在一个按钮上尝试这个(btnEasy1
)
聚苯乙烯。该错误表明我正在尝试在空对象引用上调用虚拟方法。
ImageButton btnEasy1, btnEasy2, btnEasy3, btnEasy4, btnEasy5, btnEasy6, btnEasy7, btnEasy8, btnEasy9, btnEasy10, btnBack;
int row = 0 , column = 0 , stage = 0;
ButtonFunctions btnFunc;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_level__easy);
this.btnEasy1 = findViewById(R.id.btnEasy1);
this.btnEasy2 = findViewById(R.id.btnEasy2);
this.btnEasy3 = findViewById(R.id.btnEasy3);
this.btnEasy4 = findViewById(R.id.btnEasy4);
this.btnEasy5 = findViewById(R.id.btnEasy5);
this.btnEasy6 = findViewById(R.id.btnEasy6);
this.btnEasy7 = findViewById(R.id.btnEasy7);
this.btnEasy8 = findViewById(R.id.btnEasy8);
this.btnEasy9 = findViewById(R.id.btnEasy9);
this.btnEasy10 = findViewById(R.id.btnEasy10);
this.btnBack = findViewById(R.id.btnBack);
//Easy Level intents
Intent easyLevelIntent = new Intent(getApplicationContext(), GameActivity.class);
btnBack.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent(getApplicationContext(), Level_Selection.class);
startActivity(intent);
finish();
);
btnEasy1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
btnFunc =new ButtonFunctions();
btnFunc.functions("easy1");
finish();
);
public class ButtonFunctions extends AppCompatActivity
int row, column, stage;
public void functions(String diffStage)
Intent easyLevelIntent = new Intent(getApplicationContext(), GameActivity.class);
if(diffStage.equals("easy1"))
stage = 1 ;row = 2; column = 2 ;
setRowCol(easyLevelIntent);
startActivity(easyLevelIntent);
private void setRowCol(Intent easyLevelIntent)
easyLevelIntent.putExtra("easyStageCount", stage);
easyLevelIntent.putExtra("rowCount", row);
easyLevelIntent.putExtra("colCount", column);
easyLevelIntent.putExtra("difficulty", 1);
Process: com.flip, PID: 10543
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)
at com.flip.Functions.ButtonFunctions.functions(ButtonFunctions.java:14)
at com.flip.StageSelection.Level_Easy$2.onClick(Level_Easy.java:54)
at android.view.View.performClick(View.java:5680)
at android.view.View$PerformClick.run(View.java:22650)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6364)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1076)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:937)
【问题讨论】:
【参考方案1】:您已将ButtonFunctions
声明为扩展AppCompatActivity
。但是这个类不是Activity
,它只是一个实用类。您收到此 NullPointerException 是因为您使用 new
关键字创建了 Activity
。这是不允许的。只有 Android 框架才能正确创建 Android 组件的新实例 (Activity, Service, Provider
)。
您应该从ButtonFunctions
类声明中删除extends AppCompatActivity
,并将Context
参数添加到任何需要的方法中。比如这个:
public void functions(Context context, String diffStage)
Intent easyLevelIntent = new Intent(context, GameActivity.class);
if(diffStage.equals("easy1"))
stage = 1 ;row = 2; column = 2 ;
setRowCol(easyLevelIntent);
context.startActivity(easyLevelIntent);
另一种方法是将所有方法从ButtonFunctions
移动到您的Activity
,因为它们似乎非常依赖它。但这是您需要做出的架构选择。
【讨论】:
以上是关于从一个类中获取 Intent 值并将 Intent 设置为另一个类的主要内容,如果未能解决你的问题,请参考以下文章
Android:intent.putExtra 在服务类中获取通知
尝试使用 Intent 获取字符串时未设置 .child()
如何获取接收到 Intent 的变量,使其成为静态变量,并将其发送到 Android 上的另一个类?
如何获取listView位置值并通过intent传递给另一个类