2014-01-28 31 views
0

我試着懷孕的應用程序。我的應用程序工作正常,但有時我的應用程序會得到java.lang.InstantiationException。android java.lang.InstantiationException

這是例外

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tupbebekailesi.medyasef.hamilelikrehberi/com.tupbebekailesi.medyasef.hamilelikrehberi.MotherActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.tupbebekailesi.medyasef.hamilelikrehberi.OpenActivity: make sure class name exists, is public, and has an empty constructor that is public 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2304) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
    at android.app.ActivityThread.access$700(ActivityThread.java:165) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5450) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.tupbebekailesi.medyasef.hamilelikrehberi.OpenActivity: make sure class name exists, is public, and has an empty constructor that is public 
    at android.app.Fragment.instantiate(Fragment.java:600) 
    at android.app.FragmentState.instantiate(Fragment.java:97) 
    at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767) 
    at android.app.Activity.onCreate(Activity.java:932) 
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:204) 
    at com.tupbebekailesi.medyasef.hamilelikrehberi.MotherActivity.onCreate(MotherActivity.java:92) 
    at android.app.Activity.performCreate(Activity.java:5369) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267) 
    ... 11 more 
    Caused by: java.lang.InstantiationException: can't instantiate class com.tupbebekailesi.medyasef.hamilelikrehberi.OpenActivity; no empty constructor 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1130) 
at android.app.Fragment.instantiate(Fragment.java:589) 

據我所知,這個代碼我OpenActivity.java沒有沒有空的構造。

這是開放activity.java文件

public class OpenActivity extends Fragment implements View.OnClickListener { 

    private Button done,pregnant_button; 
    private Context mContext; 
    private Button numbered_date; 
    private EditText mom_name,pre_pregnant_weight; 

    public OpenActivity(Context mContext) { 
     this.mContext = mContext; 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.open_calculator,container,false); 

     mom_name   = (EditText) rootView.findViewById(R.id.mom_name); 
     pregnant_button  = (Button) rootView.findViewById(R.id.pregnant_button); 
     pre_pregnant_weight = (EditText) rootView.findViewById(R.id.pre_pregnant_weight); 
     done    = (Button) rootView.findViewById(R.id.done); 

     mom_name.setText(MotherActivity.preferences.getString(MotherActivity.USER_NS,"")); 
     pregnant_button.setText(MotherActivity.preferences.getString(MotherActivity.USER_DUE_DATE,"--/--/--")); 
     pre_pregnant_weight.setText(MotherActivity.preferences.getString(MotherActivity.USER_PRE_WEIGHT,"")); 

     pregnant_button.setOnClickListener(this); 
     done.setOnClickListener(this); 

     return rootView; 
    } 

    public void showDatePickerDialog() { 
     DialogFragment newFragment = new CalendarItem(pregnant_button); 
     newFragment.show(getFragmentManager(), "datePicker"); 
    } 

    public boolean calculate_elapsed_time(long milisecondsdate) { 
     long gecen_zaman  = System.currentTimeMillis() - milisecondsdate; 
     long toplamhamilelik = 280 * CalculateActivity.bir_gun; 
     if(milisecondsdate > System.currentTimeMillis() || gecen_zaman > toplamhamilelik) { 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public void onClick(View v) { 

     String get_name_surname   = mom_name.getText().toString(); 
     String get_due_date    = pregnant_button.getText().toString(); 
     String get_pre_pregnant_weight = pre_pregnant_weight.getText().toString(); 

     SharedPreferences.Editor editor = MotherActivity.preferences.edit(); 

     if (v == pregnant_button) { 
      showDatePickerDialog(); 
     } 
     else if(v == done) { 
      long pregnant_date  = MotherActivity.preferences.getLong(MotherActivity.USER_DUE_DATE_MS,0); 
      if(get_name_surname.equals("Adınız Soyadınız") || get_name_surname.equals("")) { 
       show_toast(R.string.empty_name_surname); 
      } 
      else if(get_due_date.equals("--/--/--")) { 
       show_toast(R.string.empty_due_date); 
      } 
      else if(calculate_elapsed_time(pregnant_date)){ 
       show_toast(R.string.wrong_pregnant_date_calculate); 
      } 
      else if(get_pre_pregnant_weight.equals("")) { 
       show_toast(R.string.empty_pre_pregnant_warning); 
      } 
      else { 

       boolean get_due_date_state  = MotherActivity.preferences.getBoolean(MotherActivity.DUE_DATE_ENTRY, false); 
       /* 
       Hesaplıyıcı sayfasında tamam butonuna basıldğında 
       hafta bitimine kalan gün değerini int olarak yolluyoruz. 
       Kullanıcı 6. gündeyse 1 değerini 7. gündeyse 0 değerini yolluyoruz. 
       Dinleyen dosya WeekAlarms.java 
       */ 
       Intent start_alarm = new Intent(MotherActivity.WEEK_ALARM_NAME); 
       getActivity().sendBroadcast(start_alarm); 


       int week_number     = MotherActivity.week_number(); 
       CRUD crud      = new CRUD(mContext); 
       List<WeekToWeekWeights> wtw  = new ArrayList<WeekToWeekWeights>(); 

       /* 
       Uygulamaya ilk giriş olup olmadığını kontrol eder. 
       İlk giriş olup olmadığına göre 
       Kilo hesabı için kullanılan database şekli değişecektir. 
       */ 
       if(get_due_date_state){ 
        int get_db_total_count  = crud.db_total_count(); 
        if(week_number > get_db_total_count) { 

         for (int i = get_db_total_count + 1; i <= week_number + 1 ; i++) { 
          wtw.add(new WeekToWeekWeights(i,"--",usualy_weight_val[i-1])); 
         } 
         crud.add_weight(wtw); 
        } 
        else if(week_number < get_db_total_count) { 
         crud.delete_weights(week_number+1); 
         crud.update_weight(String.valueOf(MotherActivity.preferences.getString(MotherActivity.USER_CURRENT_WEIGHT,"--"))); 
        } 
       } 
       else { 
        for (int i = 1; i <= week_number + 1 ; i++) { 
         wtw.add(new WeekToWeekWeights(i,"--",usualy_weight_val[i-1])); 
        } 
        crud.add_weight(wtw); 
       } 

       editor.putString(MotherActivity.USER_NS,get_name_surname); 
       editor.putString(MotherActivity.USER_DUE_DATE,get_due_date); 
       editor.putString(MotherActivity.USER_PRE_WEIGHT,get_pre_pregnant_weight); 
       editor.putBoolean(MotherActivity.DUE_DATE_ENTRY,true); 
       editor.apply(); 

       Intent go_entry_page = new Intent(mContext,MotherActivity.class); 
       go_entry_page.putExtra(MotherActivity.TARGET_RESPOND,"entry_page"); 
       startActivity(go_entry_page); 
      } 
     } 
    } 

    public void show_toast(int value){ 
     Toast.makeText(mContext,value,Toast.LENGTH_LONG).show(); 
    } 
} 

對不起不好英語。 請幫忙。謝謝

+0

'據我所知,這個代碼我OpenActivity.java沒有沒有空constructor.'那麼什麼是你的問題? – njzk2

回答

2

好吧,你的答案是問題...

從stackStrace:

has an empty constructor that is public 

所以,你需要定義構造函數:

public OpenActivity() { 
} 

你可以訪問使用getActivity()

如果您絕對想要ap rivate到Context(不推薦,雖然...),覆蓋的方法onAttach & onDetach

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mContext = activity; 
} 

@Override 
public void onDetach() { 
    mContext = null; 
    super.onDetach(); 
} 
相關問題