Java onClickListener正在崩溃应用程序,onOptionsItemSelected未按预期触发
我正在尝试创建一个带有嵌入式数据库的基本评级应用程序。但不幸的是,每当我试图为reportSomeoneButton编写onClickListener时,应用程序就会崩溃,或者事件没有被正确调用,而按钮什么也不做 预期的操作是,让某人单击ReportSomeOne按钮,这将创建一个警报对话框,请求用户输入。用户输入注释,然后信息存储在数据库中并填充下表 我已经为此挣扎了好几个小时了。教程并没有提到我要找的东西,关于stackoverflow的其他问题对学习不同的东西很有帮助,但我似乎无法理解这一点。我对Android Studio的开发非常陌生,所以任何形式的帮助都将不胜感激,无论是一个完美的解决方案还是为我的研究指明正确的方向,都将不胜感激 不管怎么说,我的情况如下: MainActivity.javaJava onClickListener正在崩溃应用程序,onOptionsItemSelected未按预期触发,java,android,xml,onclicklistener,Java,Android,Xml,Onclicklistener,我正在尝试创建一个带有嵌入式数据库的基本评级应用程序。但不幸的是,每当我试图为reportSomeoneButton编写onClickListener时,应用程序就会崩溃,或者事件没有被正确调用,而按钮什么也不做 预期的操作是,让某人单击ReportSomeOne按钮,这将创建一个警报对话框,请求用户输入。用户输入注释,然后信息存储在数据库中并填充下表 我已经为此挣扎了好几个小时了。教程并没有提到我要找的东西,关于stackoverflow的其他问题对学习不同的东西很有帮助,但我似乎无法理解这一
import android.app.DatePickerDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.Calendar;
import static android.provider.AlarmClock.EXTRA_MESSAGE;
public class MainActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE = "Welcome!";
//private Reports currentReport;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendMessage(View view)
{
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.editText2);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Calendar;
public class DisplayMessageActivity extends AppCompatActivity
{
public String currentDate;
private RatingDBHelper dbAssistant;
private ListView listHandler;
private ArrayAdapter<String> arrayHandler;
private static final String TAG = "MainActivity";
private TextView getCurrentDate;
private DatePickerDialog.OnDateSetListener dateListener;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = findViewById(R.id.textView);
textView.setText("Welcome, " + message + "!");
getCurrentDate = (TextView) findViewById(R.id.textView);
getCurrentDate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//int date = calendar.get(Calendar.DAY_OF_WEEK);
DatePickerDialog dialog = new DatePickerDialog(
DisplayMessageActivity.this,
android.R.style.Theme_DeviceDefault_Dialog_MinWidth,
dateListener,
year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0xFFFF6666));
dialog.show();
}
});
dateListener = new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day)
{
month = month + 1;
Log.d(TAG, "onDateSet: mm/dd/yyyy: " + month + "/" + day + "/" + year);
String submittedDate = month + "/" + day + "/" + year;
if (!(submittedDate != null && !submittedDate.isEmpty()))
{
currentDate = submittedDate;
}
else
{
currentDate = submittedDate;
}
getCurrentDate.setText(submittedDate);
}
};
dbAssistant = new RatingDBHelper(this);
listHandler = (ListView) findViewById(R.id.reportedRatings);
refreshList();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.reportSomeoneButton:
final EditText reportInput = new EditText(this);
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Report a Driver")
.setMessage("License Plate #: ")
.setView(reportInput)
.setPositiveButton("Submit", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int i)
{
String licensePlate = String.valueOf(reportInput.getText());
SQLiteDatabase db = dbAssistant.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ReportDataSource.ReportSubmission.COL_TASK_TITLE, licensePlate + "\n" + currentDate);
db.insertWithOnConflict(ReportDataSource.ReportSubmission.TABLE,
null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.close();
refreshList();
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void refreshList()
{
ArrayList<String> reportList = new ArrayList<>();
SQLiteDatabase db = dbAssistant.getReadableDatabase();
Cursor cursor = db.query(ReportDataSource.ReportSubmission.TABLE,
new String[] {ReportDataSource.ReportSubmission._ID, ReportDataSource.ReportSubmission.COL_TASK_TITLE},
null, null, null, null,null);
while (cursor.moveToNext())
{
int idx = cursor.getColumnIndex(ReportDataSource.ReportSubmission.COL_TASK_TITLE);
reportList.add(cursor.getString(idx));
}
if(arrayHandler == null)
{
arrayHandler = new ArrayAdapter<>(this,
R.layout.activity_display_message,
R.id.textView,
reportList);
listHandler.setAdapter(arrayHandler);
}
else
{
arrayHandler.clear();
arrayHandler.addAll(reportList);
arrayHandler.notifyDataSetChanged();
}
cursor.close();
db.close();
}
}
活动\u main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="0dp"
tools:context="com.example.feral.myapplication.MainActivity">
<EditText
android:id="@+id/editText2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:ems="10"
android:hint="@string/edit_message"
android:inputType="textPersonName"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="20dp"
android:onClick="sendMessage"
android:text="@string/button_send"
app:layout_constraintBaseline_toBaselineOf="@+id/editText2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/editText2"
android:layout_marginLeft="20dp"
android:layout_marginRight="16dp" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/honkhonklogo" />
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.feral.myapplication.DisplayMessageActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="TextView"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/reportSomeoneButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="@string/reportSomeone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ratingBar" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="86dp"
android:layout_height="55dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:cropToPadding="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:srcCompat="@drawable/blankprofile" />
<RatingBar
android:id="@+id/ratingBar"
style="@style/Widget.AppCompat.RatingBar"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:clickable="true"
android:isIndicator="false"
android:stepSize="1"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3" />
<ListView
android:id="@+id/reportedRatings"
android:layout_width="0dp"
android:layout_height="339dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="16dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/reportSomeoneButton" />
</android.support.constraint.ConstraintLayout>
DisplayMessageActivity.java
import android.app.DatePickerDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.Calendar;
import static android.provider.AlarmClock.EXTRA_MESSAGE;
public class MainActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE = "Welcome!";
//private Reports currentReport;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendMessage(View view)
{
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.editText2);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Calendar;
public class DisplayMessageActivity extends AppCompatActivity
{
public String currentDate;
private RatingDBHelper dbAssistant;
private ListView listHandler;
private ArrayAdapter<String> arrayHandler;
private static final String TAG = "MainActivity";
private TextView getCurrentDate;
private DatePickerDialog.OnDateSetListener dateListener;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = findViewById(R.id.textView);
textView.setText("Welcome, " + message + "!");
getCurrentDate = (TextView) findViewById(R.id.textView);
getCurrentDate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//int date = calendar.get(Calendar.DAY_OF_WEEK);
DatePickerDialog dialog = new DatePickerDialog(
DisplayMessageActivity.this,
android.R.style.Theme_DeviceDefault_Dialog_MinWidth,
dateListener,
year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0xFFFF6666));
dialog.show();
}
});
dateListener = new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day)
{
month = month + 1;
Log.d(TAG, "onDateSet: mm/dd/yyyy: " + month + "/" + day + "/" + year);
String submittedDate = month + "/" + day + "/" + year;
if (!(submittedDate != null && !submittedDate.isEmpty()))
{
currentDate = submittedDate;
}
else
{
currentDate = submittedDate;
}
getCurrentDate.setText(submittedDate);
}
};
dbAssistant = new RatingDBHelper(this);
listHandler = (ListView) findViewById(R.id.reportedRatings);
refreshList();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.reportSomeoneButton:
final EditText reportInput = new EditText(this);
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Report a Driver")
.setMessage("License Plate #: ")
.setView(reportInput)
.setPositiveButton("Submit", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int i)
{
String licensePlate = String.valueOf(reportInput.getText());
SQLiteDatabase db = dbAssistant.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ReportDataSource.ReportSubmission.COL_TASK_TITLE, licensePlate + "\n" + currentDate);
db.insertWithOnConflict(ReportDataSource.ReportSubmission.TABLE,
null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.close();
refreshList();
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void refreshList()
{
ArrayList<String> reportList = new ArrayList<>();
SQLiteDatabase db = dbAssistant.getReadableDatabase();
Cursor cursor = db.query(ReportDataSource.ReportSubmission.TABLE,
new String[] {ReportDataSource.ReportSubmission._ID, ReportDataSource.ReportSubmission.COL_TASK_TITLE},
null, null, null, null,null);
while (cursor.moveToNext())
{
int idx = cursor.getColumnIndex(ReportDataSource.ReportSubmission.COL_TASK_TITLE);
reportList.add(cursor.getString(idx));
}
if(arrayHandler == null)
{
arrayHandler = new ArrayAdapter<>(this,
R.layout.activity_display_message,
R.id.textView,
reportList);
listHandler.setAdapter(arrayHandler);
}
else
{
arrayHandler.clear();
arrayHandler.addAll(reportList);
arrayHandler.notifyDataSetChanged();
}
cursor.close();
db.close();
}
}
导入android.app.AlertDialog;
导入android.app.DatePickerDialog;
导入android.content.ContentValues;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.graphics.Color;
导入android.graphics.drawable.ColorDrawable;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.DatePicker;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.Calendar;
公共类DisplayMessageActivity扩展了AppCompatActivity
{
公共字符串currentDate;
私人评级辅助数据助理;
私有ListView listHandler;
私人ArrayAdapter arrayHandler;
私有静态最终字符串TAG=“MainActivity”;
私有文本视图getCurrentDate;
私有DatePickerDialog.OnDateSetListener dateListener;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u display\u message);
Intent=getIntent();
字符串消息=intent.getStringExtra(MainActivity.EXTRA_消息);
TextView TextView=findViewById(R.id.TextView);
setText(“欢迎,“+消息+”!”);
getCurrentDate=(TextView)findViewById(R.id.TextView);
getCurrentDate.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图)
{
日历=Calendar.getInstance();
int year=calendar.get(calendar.year);
int month=calendar.get(calendar.month);
int day=calendar.get(calendar.day/u月);
//int date=calendar.get(calendar.DAY/u周);
DatePickerDialog对话框=新建DatePickerDialog(
DisplayMessageActivity.this,
android.R.style.Theme\u DeviceDefault\u对话框\u最小宽度,
dateListener,
年、月、日);
dialog.getWindow().setBackgroundDrawable(新的ColorDrawable(0xFFFF6666));
dialog.show();
}
});
dateListener=新建DatePickerDialog.OnDateSetListener()
{
@凌驾
公共无效onDateSet(日期选择器日期选择器,整数年,整数月,整数天)
{
月=月+1;
日志d(标签“onDateSet:mm/dd/yyyy:+月+“/”+日+“/”+年);
字符串submittedDate=月+“/”+日+“/”+年;
如果(!(submittedDate!=null&!submittedDate.isEmpty())
{
currentDate=提交日期;
}
其他的
{
currentDate=提交日期;
}
getCurrentDate.setText(提交日期);
}
};
dbAssistant=新的分级DBHelper(此);
listHandler=(ListView)findViewById(R.id.reportedRatings);
刷新列表();
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
案例R.id.ReportSomeOne按钮:
最终编辑文本报告输入=新编辑文本(本);
AlertDialog=新建AlertDialog.Builder(此)
.setTitle(“报告驾驶员”)
.setMessage(“车牌号:”)
.setView(报告输入)
.setPositiveButton(“提交”,新建DialogInterface.OnClickListener())
{
@凌驾
公共void onClick(对话框接口对话框,int i)
{
String-licensePlate=String.valueOf(reportInput.getText());
SQLiteDatabase db=dbAssistant.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(ReportDataSource.ReportSubmission.COL_TASK_TITLE,licensePlate+“\n”+当前日期);
db.insertWithOnConflict(ReportDataSource.ReportSubmission.TABLE,
null,值,SQLiteDatabase.CONFLICT\u REPLACE);
db.close();