我的自定义对话框单击获得空指针异常。当我打开CustomDialog应用程序crashes时,出现以下错误(空指针异常)。我在下面添加了MainActivity.java和edit_item.xml代码。如果我需要添加任何东西,请发表评论。我的代码有什么问题。
android.widget.Button.setOnClickListener(android.view.View$OnClickListener)
on a null object reference
at com.example.android.chartvisual.MainActivity.custom_Dialog(MainActivity.java:122)
at com.example.android.chartvisual.MainActivity.access$000(MainActivity.java:29)
at com.example.android.chartvisual.MainActivity$1.onClick(MainActivity.java:101)
at android.view.View.performClick(View.java:6319)
at android.view.View$PerformClick.run(View.java:24955)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6701)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
这里是我的MainActivity.java
public class MainActivity extends AppCompatActivity {
ImageView edit;
Dialog editDialog;
EditText edit_cal,edit_carb,edit_prot,edit_fats;
String cal,carb,prot,fats;
Button save;
public static final String SHARED_PREFS = "sharedPrefs";
public static final String CAL = "text";
public static final String CARB = "text";
public static final String PROT = "text";
public static final String FATS = "text";
TextView tcal,tcarb,tprot,tfats;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit=findViewById(R.id.edit);
pieChart=findViewById(R.id.pie);
tcal=findViewById(R.id.tcal);
tcarb=findViewById(R.id.tcarb);
tprot=findViewById(R.id.tprot);
tfats=findViewById(R.id.tfats);
saveData();
loadData();
updateViews();
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
custom_Dialog();
}
});
}
private void custom_Dialog() {
editDialog=new Dialog(MainActivity.this);
editDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
editDialog.setCancelable(true);
editDialog.setContentView(R.layout.edit_item);
editDialog.show();
edit_cal=findViewById(R.id.edit_cal);
edit_carb=findViewById(R.id.edit_carb);
edit_prot=findViewById(R.id.edit_prot);
edit_fats=findViewById(R.id.edit_fats);
save=findViewById(R.id.savebtn);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cal=edit_cal.getText().toString();
carb=edit_carb.getText().toString();
prot=edit_prot.getText().toString();
fats=edit_fats.getText().toString();
if(isValid(cal,carb,prot,fats))
{
saveData();
loadData();
updateViews();
editDialog.dismiss();
}
else
{
Toast.makeText(MainActivity.this,"Please fill your diet plan correctly",Toast.LENGTH_SHORT).show();
}
}
});
}
这是我的edit_item.xml
<Button
android:id="@+id/savebtn"
android:layout_width="296dp"
android:layout_height="48dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="340dp"
android:background="@drawable/button_default_2"
android:fontFamily="sans-serif-medium"
android:letterSpacing="-0.03"
android:text="Save"
android:textColor="#ffffff"
android:textSize="13sp"
android:textStyle="normal"/>
我在这里犯了什么错误,请帮忙。谢谢。
设置对话框的内容视图>
editDialog.setContentView(R.layout.edit_nutrient);
使用对话框的findViewById()方法在对话框中进行搜索,当前您是在Activity而不是对话框中搜索视图。
edit_cal=editDialog.findViewById(R.id.edit_cal); edit_carb=editDialog.findViewById(R.id.edit_carb); edit_prot=editDialog.findViewById(R.id.edit_prot); edit_fats=editDialog.findViewById(R.id.edit_fats); save=editDialog.findViewById(R.id.savebtn);
我希望这会有所帮助。
您应该执行此操作以在对话框中使用视图,而不是在活动中搜索视图。