我需要帮助来解决我的应用程序出了什么问题。对于使用Java的Android Studio类的作业,我们的任务是以编程方式构建不使用XML的简单应用程序。该应用程序的目标是动态创建3个按钮,当您单击一个按钮时,将生成一个文本视图以显示与该按钮有关的消息。我已经将所有代码都编码到了应用程序的启动和运行位置,但是每当我单击三个按钮之一时,我的应用程序就会崩溃,说明:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.missouristate.calebcase.shadesv1, PID: 24474
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.constraintlayout.widget.ConstraintLayout.addView(android.view.View)' on a null object reference
at com.missouristate.calebcase.shadesv1.MainActivity$1.onClick(MainActivity.java:107)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
这是我用来开发应用程序的代码:
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import static com.missouristate.calebcase.shadesv1.R.*;
public class MainActivity extends AppCompatActivity {
private ConstraintSet set;
private ConstraintLayout layout;
private Button goldButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.CL_1);
layout.setBackgroundColor(Color.parseColor("#c89b6d"));
ConstraintSet set = new ConstraintSet();
set.clone(layout);
//Button 1:
Button plumButton = new Button(this);
plumButton.setText(getString(string.plum));
plumButton.setId(View.generateViewId()); // <-- Important
plumButton.setTag("btn1");
plumButton.setBackgroundColor(Color.parseColor("#ac7d50"));
plumButton.setOnClickListener(ShadeChangeListener);
layout.addView(plumButton);
set.connect(plumButton.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 50);
set.connect(plumButton.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);
set.connect(plumButton.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);
set.constrainHeight(plumButton.getId(), 200);
set.applyTo(layout);
//Button 2:
Button blueButton = new Button(this);
blueButton.setText(getString(string.blue));
blueButton.setId(View.generateViewId());
blueButton.setTag("btn2");
blueButton.setBackgroundColor(Color.parseColor("#ac7d50"));
blueButton.setOnClickListener(ShadeChangeListener);
layout.addView(blueButton);
set.connect(blueButton.getId(), ConstraintSet.TOP, plumButton.getId(), ConstraintSet.BOTTOM, 10);
set.connect(blueButton.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);
set.connect(blueButton.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);
set.constrainHeight(blueButton.getId(), 200);
set.applyTo(layout);
//Button 3:
Button goldButton = new Button(this);
goldButton.setText(getString(string.gold));
goldButton.setId(View.generateViewId());
goldButton.setTag("btn3");
goldButton.setBackgroundColor(Color.parseColor("#ac7d50"));
goldButton.setOnClickListener(ShadeChangeListener);
layout.addView(goldButton);
set.connect(goldButton.getId(), ConstraintSet.TOP, blueButton.getId(), ConstraintSet.BOTTOM, 10);
set.connect(goldButton.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);
set.connect(goldButton.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);
set.constrainHeight(goldButton.getId(), 200);
set.applyTo(layout);
}
private final View.OnClickListener ShadeChangeListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
String description = (String) view.getTag();
// Create a text view programmatically
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);
textView.setBackgroundColor(Color.parseColor("#ac7d50"));
textView.setId(View.generateViewId());
switch ((String) view.getTag()) {
case "btn1":
textView.setText(string.plum_is);
break;
case "btn2":
textView.setText(string.blue_is);
break;
case "btn3":
textView.setText(string.gold_is);
break;
}
layout.addView(textView);
set.connect(textView.getId(), ConstraintSet.TOP, goldButton.getId(), ConstraintSet.BOTTOM, 50);
set.connect(textView.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
set.connect(textView.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 0);
set.constrainHeight(textView.getId(), 400);
set.applyTo(layout);
}
};
}
任何帮助将不胜感激!另外,第107行引用了这一行“ layout.addView(textView);”
答案 0 :(得分:0)
我认为当您声明类型
时 ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.CL_1);
layout.setBackgroundColor(Color.parseColor("#c89b6d"));
ConstraintSet set = new ConstraintSet();
set.clone(layout);
在函数内部,您正在创建局部函数,而您在类顶部声明的那个仍然是null
。试试;
layout = (ConstraintLayout) findViewById(R.id.CL_1);
layout.setBackgroundColor(Color.parseColor("#c89b6d"));
set = new ConstraintSet();
set.clone(layout);
layout
和set
在Android Studio中应为紫色。