AndroidとJavaのプログラミングには新しく、最初のアプリケーションで作業していますが、問題が発生しました。 FuelAmount
、FuelCost
、CashSpend
の3つの編集テキストがあります。FA
が記入され、FC
が記入されている場合、CS
は自動的に記入する必要があります。 私はだから私は私のEditTexts
のすべてにaddTextChangedListener
を試してみましたが、見つける など>CS
= FC
FA
、それはすべての可能な組み合わせ= CS
FA
>FC
で仕事をしたいです。しかし、私はその後、CashSpend
かFuelAmount
、その後CashSpend
をFuelCost
を入れてときのような組み合わせにjava.lang.StackOverflowErrorをAndroid自動更新EditTextが他に埋め込まれている場合
と入力のデータアプリのクラッシュをすべての方法をテストしていたとき。
import android.app.DatePickerDialog; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.TextWatcher; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.DatePicker; import android.widget.EditText; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; public class NewRefuelActivity extends AppCompatActivity { EditText KmCounter,FuelAmount, FuelPrice,CashSpend,RefuelDate; Context context = this; DBHelper dbHelper; SQLiteDatabase sqLiteDatabase; Calendar myCalendar = Calendar.getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_refuel); android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (getSupportActionBar() != null){ getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } KmCounter = (EditText) findViewById(R.id.NewRefuel_KmCounter_Input); FuelAmount = (EditText) findViewById(R.id.NewRefuel_FuelAmount_Input); FuelPrice = (EditText) findViewById(R.id.NewRefuel_FuelPrice_Input); CashSpend = (EditText) findViewById(R.id.NewRefuel_CashSpend_Input); RefuelDate = (EditText) findViewById(R.id.NewRefuel_Date_Input); updateLabel_RefuelDate(); RefuelDate.setFocusableInTouchMode(false); RefuelDate.setFocusable(false); final DatePickerDialog.OnDateSetListener DTPListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { myCalendar.set(Calendar.YEAR,year); myCalendar.set(Calendar.MONTH,monthOfYear); myCalendar.set(Calendar.DAY_OF_MONTH,dayOfMonth); updateLabel_RefuelDate(); } }; RefuelDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DatePickerDialog(NewRefuelActivity.this, DTPListener, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); } }); //error EditText_AutoFill(); } public void EditText_AutoFill(){ FuelAmount.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() != 0){ if (FuelPrice.getText().toString().trim().length() != 0){ Float FA = Float.parseFloat(FuelAmount.getText().toString()); Float FC = Float.parseFloat(FuelPrice.getText().toString()); Float CS = FA * FC; CashSpend.setText(CS.toString()); } else if (CashSpend.getText().toString().trim().length() != 0){ Float FA = Float.parseFloat(FuelAmount.getText().toString()); Float CS = Float.parseFloat(CashSpend.getText().toString()); Float FC = CS/FA; FuelAmount.setText(FC.toString()); } } } @Override public void afterTextChanged(Editable s) { } }); FuelPrice.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() != 0) { if (FuelAmount.getText().toString().trim().length() != 0) { Float FC = Float.parseFloat(FuelPrice.getText().toString()); Float FA = Float.parseFloat(FuelAmount.getText().toString()); Float CS = FA * FC; CashSpend.setText(CS.toString()); } else if (CashSpend.getText().toString().trim().length() != 0) { Float FC = Float.parseFloat(FuelPrice.getText().toString()); Float CS = Float.parseFloat(CashSpend.getText().toString()); Float FA = CS/FC; FuelAmount.setText(FA.toString()); } } } @Override public void afterTextChanged(Editable s) { } }); CashSpend.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() != 0) { if (FuelAmount.getText().toString().trim().length() != 0) { Float CS = Float.parseFloat(CashSpend.getText().toString()); Float FA = Float.parseFloat(FuelAmount.getText().toString()); Float FC = CS/FA; FuelPrice.setText(FC.toString()); } else if (FuelPrice.getText().toString().trim().length() != 0) { Float CS = Float.parseFloat(CashSpend.getText().toString()); Float FC = Float.parseFloat(FuelPrice.getText().toString()); Float FA = CS/FC; FuelAmount.setText(FA.toString()); } } } @Override public void afterTextChanged(Editable s) { } }); } private void updateLabel_RefuelDate(){ String myFormat = "dd-MM-yyyy"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(myFormat, Locale.US); RefuelDate.setText(simpleDateFormat.format(myCalendar.getTime())); } public void addNewRefuel(){ Float km_counter = Float.parseFloat(KmCounter.getText().toString()); Float fuel_amount = Float.parseFloat(FuelAmount.getText().toString()); Float fuel_price = Float.parseFloat(FuelPrice.getText().toString()); Float cash_spend = Float.parseFloat(CashSpend.getText().toString()); String fuel_date = RefuelDate.getText().toString(); dbHelper = new DBHelper(context); sqLiteDatabase = dbHelper.getWritableDatabase(); dbHelper.addRefuel(fuel_amount, fuel_price, cash_spend, km_counter, fuel_date, sqLiteDatabase); Toast.makeText(getBaseContext(),"Tankowanie dodane", Toast.LENGTH_SHORT).show(); dbHelper.close(); } public void clearRefuelEditText(){ //KmCounter.getText().clear(); KmCounter.setText(""); FuelAmount.setText(""); FuelPrice.setText(""); CashSpend.setText(""); RefuelDate.setText(""); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_new_refuel_activity, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_refuel_tab) { return true; } if (id == R.id.action_add_refuel){ addNewRefuel(); clearRefuelEditText(); finish(); //TODO: przetestowac alternatywe finish() /* Intent i=new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } */ return true; } case android.R.id.home: // this takes the user 'back', as if they pressed the left-facing triangle icon on the main android toolbar. // if this doesn't work as desired, another possibility is to call `finish()` here. onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } }
誰かが私に何か解決策を提案できますか?
ありがとうございます。
編集。全体のエラー
04-22 06:28:18.280 1816-1816/? E/MessageQueue-JNI: java.lang.StackOverflowError at android.text.TextUtils.getChars(TextUtils.java:77) at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) at android.text.TextUtils.getChars(TextUtils.java:77) at android.graphics.Paint.getTextRunAdvances(Paint.java:1800) at android.text.TextLine.handleText(TextLine.java:747) at android.text.TextLine.handleRun(TextLine.java:956) at android.text.TextLine.measureRun(TextLine.java:414) at android.text.TextLine.measure(TextLine.java:293) at android.text.TextLine.metrics(TextLine.java:267) at android.text.Layout.getLineExtent(Layout.java:998) at android.text.Layout.getLineStartPos(Layout.java:504) at android.text.Layout.getHorizontal(Layout.java:861) at android.text.Layout.getHorizontal(Layout.java:830) at android.text.Layout.getPrimaryHorizontal(Layout.java:805) at android.text.Layout.getPrimaryHorizontal(Layout.java:795) at android.widget.TextView.getFocusedRect(TextView.java:5135) at android.view.FocusFinder.findNextFocus(FocusFinder.java:120) at android.view.FocusFinder.findNextFocus(FocusFinder.java:94) at android.view.FocusFinder.findNextFocus(FocusFinder.java:65) at android.view.ViewGroup.focusSearch(ViewGroup.java:670) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.View.focusSearch(View.java:6392) at android.widget.TextView.onCreateInputConnection(TextView.java:5641) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1120) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1070) at android.widget.TextView.setText(TextView.java:3691) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$4.onTextChanged(NewRefuelActivity.java:130) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$4.onTextChanged(NewRefuelActivity.java:130) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629)04-22 06:28:18.280 1816-1816/? E/MessageQueue-JNI: java.lang.StackOverflowError at android.text.TextUtils.getChars(TextUtils.java:77) at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) at android.text.TextUtils.getChars(TextUtils.java:77) at android.graphics.Paint.getTextRunAdvances(Paint.java:1800) at android.text.TextLine.handleText(TextLine.java:747) at android.text.TextLine.handleRun(TextLine.java:956) at android.text.TextLine.measureRun(TextLine.java:414) at android.text.TextLine.measure(TextLine.java:293) at android.text.TextLine.metrics(TextLine.java:267) at android.text.Layout.getLineExtent(Layout.java:998) at android.text.Layout.getLineStartPos(Layout.java:504) at android.text.Layout.getHorizontal(Layout.java:861) at android.text.Layout.getHorizontal(Layout.java:830) at android.text.Layout.getPrimaryHorizontal(Layout.java:805) at android.text.Layout.getPrimaryHorizontal(Layout.java:795) at android.widget.TextView.getFocusedRect(TextView.java:5135) at android.view.FocusFinder.findNextFocus(FocusFinder.java:120) at android.view.FocusFinder.findNextFocus(FocusFinder.java:94) at android.view.FocusFinder.findNextFocus(FocusFinder.java:65) at android.view.ViewGroup.focusSearch(ViewGroup.java:670) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.ViewGroup.focusSearch(ViewGroup.java:672) at android.view.View.focusSearch(View.java:6392) at android.widget.TextView.onCreateInputConnection(TextView.java:5641) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1120) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1070) at android.widget.TextView.setText(TextView.java:3691) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$4.onTextChanged(NewRefuelActivity.java:130) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$4.onTextChanged(NewRefuelActivity.java:130) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629) at android.widget.EditText.setText(EditText.java:80) at android.widget.TextView.setText(TextView.java:3604) at com.example.pietrzyk.sqlite1.NewRefuelActivity$5.onTextChanged(NewRefuelActivity.java:162) at android.widget.TextView.sendOnTextChanged(TextView.java:7318) at android.widget.TextView.setText(TextView.java:3774) at android.widget.TextView.setText(TextView.java:3629)
(完全)エラーを投稿してください。 – yennsarah
それは私のエミュレータでうまく動作します..あなたは全体のコードを投稿できますか? – Bharatesh
アクティビティコード全体が追加されました。すべての訴訟? – relliz