Uygulamamı çalıştırmaya çalışıyorum, ancak "Randevuları Yönet" sayfasına yönlendirmek için düğmeye her bastığımda, uygulama çöküyor.Hata Android Studio'larda ComponentInfo NullPointerException etkinliği başlatılamadı
ManageAppointments.java AppAddFragment.java
public class AppListFrag extends Fragment implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
public static final String ARG_ITEM_ID = "appointment_list";
Activity activity;
ListView appListView;
ArrayList<Appointment> appointments;
AppListAdapter appListAdapter;
AppointmentDAO appointmentDAO;
private GetAppointmentTask task;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = getActivity();
appointmentDAO = new AppointmentDAO(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_app_list, container, false);
findViewsById(view);
task = new GetAppointmentTask(activity);
task.execute((Void) null);
appListView.setOnItemClickListener(this);
appListView.setOnItemLongClickListener(this);
return view;
}
private void findViewsById(View view) {
appListView = (ListView) view.findViewById(R.id.list);
}
@Override
public void onResume() {
getActivity().setTitle(R.string.app_name);
getActivity().getActionBar().setTitle(R.string.app_name);
super.onResume();
}
@Override
public void onItemClick(AdapterView<?> list, View arg1, int position, long arg3) {
Appointment appointment = (Appointment) list.getItemAtPosition(position);
if (appointment != null) {
Bundle arguments = new Bundle();
arguments.putParcelable("selectedAppointment", appointment);
CustomAppDialogFragment customAppDialogFragment = new CustomAppDialogFragment();
customAppDialogFragment.setArguments(arguments);
customAppDialogFragment.show(getFragmentManager(), CustomAppDialogFragment.ARG_ITEM_ID);
}
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) {
Appointment appointment = (Appointment) parent.getItemAtPosition(position);
// Use AsyncTask to delete from database
appointmentDAO.delete(appointment);
appListAdapter.remove(appointment);
return true;
}
public class GetAppointmentTask extends AsyncTask<Void, Void, ArrayList<Appointment>> {
private final WeakReference<Activity> activityWeakRef;
public GetAppointmentTask(Activity context) {
this.activityWeakRef = new WeakReference<Activity>(context);
}
@Override
protected ArrayList<Appointment> doInBackground(Void... arg0) {
ArrayList<Appointment> appointmentList = appointmentDAO.getAppointments();
return appointmentList;
}
@Override
protected void onPostExecute(ArrayList<Appointment> appList) {
if (activityWeakRef.get() != null && !activityWeakRef.get().isFinishing()) {
Log.d("appointments", appList.toString());
appointments = appList;
if (appList != null) {
if (appList.size() != 0) {
appListAdapter = new AppListAdapter(activity, appList);
appListView.setAdapter(appListAdapter);
} else {
Toast.makeText(activity, "No Appointments", Toast.LENGTH_LONG).show();
}
}
}
}
}
/*
* This method is invoked from MainActivity onFinishDialog() method. It is
* called from CustomPatientDialogFragment when an patient record is updated.
* This is used for communicating between fragments.
*/
public void updateView() {
task = new GetAppointmentTask(activity);
task.execute((Void) null);
}
}
public class ManageAppointments extends FragmentActivity implements AppDialogFragmentListener {
private Fragment contentFragment;
private AppListFrag appListFragment;
private AppAddFrag appAddFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.manage_appointments);
java.text.DateFormat formatter = android.text.format.DateFormat.getDateFormat(getApplicationContext());
FragmentManager fragmentManager = getSupportFragmentManager();
/*
* This is called when orientation is changed.
*/
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("content")) {
String content = savedInstanceState.getString("content");
if (content.equals(AppAddFrag.ARG_ITEM_ID)) {
if (fragmentManager.findFragmentByTag(AppAddFrag.ARG_ITEM_ID) != null) {
setFragmentTitle(R.string.add_appointment);
contentFragment = fragmentManager.findFragmentByTag(AppAddFrag.ARG_ITEM_ID);
}
}
}
if (fragmentManager.findFragmentByTag(AppListFrag.ARG_ITEM_ID) != null) {
appListFragment = (AppListFrag) fragmentManager.findFragmentByTag(AppListFrag.ARG_ITEM_ID);
contentFragment = appListFragment;
}
} else {
appListFragment = new AppListFrag();
setFragmentTitle(R.string.app_name);
switchContent(appListFragment, AppListFrag.ARG_ITEM_ID);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
if (contentFragment instanceof AppAddFrag) {
outState.putString("content", AppAddFrag.ARG_ITEM_ID);
} else {
outState.putString("content", AppListFrag.ARG_ITEM_ID);
}
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
setFragmentTitle(R.string.add_appointment);
appAddFragment = new AppAddFrag();
switchContent(appAddFragment, AppAddFrag.ARG_ITEM_ID);
return true;
}
return super.onOptionsItemSelected(item);
}
/*
* We consider PatientListFragment as the home fragment and it is not added to
* the back stack.
*/
public void switchContent(Fragment fragment, String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate())
;
if (fragment != null) {
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
// Only PatientAddFragment is added to the back stack.
if (!(fragment instanceof AppListFrag)) {
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}
protected void setFragmentTitle(int resourseId) {
setTitle(resourseId);
getActionBar().setTitle(resourseId);
}
/*
* We call super.onBackPressed(); when the stack entry count is > 0. if it
* is instanceof PatientListFragment or if the stack entry count is == 0, then
* we prompt the user whether to quit the app or not by displaying dialog.
* In other words, from PatientListFragment on back press it quits the app.
*/
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
super.onBackPressed();
} else if (contentFragment instanceof AppListFrag
|| fm.getBackStackEntryCount() == 0) {
//Shows an alert dialog on quit
onShowQuitDialog();
}
}
public void onShowQuitDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setMessage("Do You Want To Quit?");
builder.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
builder.setNegativeButton(android.R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
@Override
public void onFinishDialog() {
if (appListFragment != null) {
appListFragment.updateView();
}
}
}
AppListFragment.java: İşte aşağıda benim kodudur
}
Hata mesajı:
04-11 19:02:12.608 25872-25872/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xpresspatients.fyp, PID: 25872
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xpresspatients.fyp/com.xpresspatients.fyp.ManageAppointments}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access$800(ActivityThread.java:145)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5127)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.xpresspatients.fyp.ManageAppointments.setFragmentTitle(ManageAppointments.java:108)
at com.xpresspatients.fyp.ManageAppointments.onCreate(ManageAppointments.java:50)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
at android.app.ActivityThread.access$800(ActivityThread.java:145)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5127)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
Ben benzer sorular baktım ve buna göre değişiklik yapmadan çalıştı, ancak yine de bu hatayı almaya devam ettik. Lütfen yardım et. Şimdiden teşekkürler.
Sen yığını-iz kesti, ama sadece setFragmentTitle (ManageAppointments.java:108) '' dan takip eğer, o zaman belki size boş değişken ne görebiliyordu. –
Bunun null olduğunu anlıyorum, ancak nasıl düzeltileceğinden emin değildim. Gösterilecek Action çubuğunu nasıl alabilirim? – Pparekhh