Saya benar-benar pemula dalam pengembangan Android, dan saya sudah mengikuti kelas selama tiga minggu. Program ini dikompilasi dan berjalan dengan baik, sampai saya mencoba mengubah EditText mana pun, atau menggeser seekBar.
Tugas: Membuat aplikasi kalkulator hipotek yang memungkinkan pengguna memasukkan harga pembelian, jumlah uang muka, dan tingkat bunga. Berdasarkan nilai-nilai ini, aplikasi harus menghitung jumlah pinjaman dan menampilkan pembayaran bulanan untuk pinjaman 10, 20, dan 30 tahun. Izinkan pengguna untuk memilih durasi pinjaman khusus (dalam tahun) dengan menggunakan SeekBar dan menampilkan pembayaran bulanan untuk durasi pinjaman khusus tersebut.
Saya hanya memiliki angka-angka yang dibagi menjadi beberapa tahun sebagai permulaan, dan belum menerapkan bunganya. Saat ini itu hanya sesuatu yang dimasukkan dan disimpan. Tapi bukan itu masalahnya. Pesan kesalahan ini muncul ketika saya mencoba mengubah teks edit pertama.
02-10 00:12:14.801 1275-1275/com.example.dakota.de_mortgage E/InputEventSender﹕ Exception dispatching finished signal.
02-10 00:12:14.802 1275-1275/com.example.dakota.de_mortgage E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
02-10 00:12:14.986 1275-1275/com.example.dakota.de_mortgage E/MessageQueue-JNI﹕ android.content.res.Resources$NotFoundException: String resource ID #0x12
at android.content.res.Resources.getText(Resources.java:274)
at android.widget.TextView.setText(TextView.java:4122)
at com.example.dakota.de_mortgage.MainActivity.updateCustom(MainActivity.java:99)
at com.example.dakota.de_mortgage.MainActivity.access$100(MainActivity.java:18)
at com.example.dakota.de_mortgage.MainActivity$2.onTextChanged(MainActivity.java:154)
at android.widget.TextView.sendOnTextChanged(TextView.java:7663)
at android.widget.TextView.handleTextChanged(TextView.java:7723)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9440)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:964)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:515)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:454)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:33)
at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
at android.widget.TextView.doKeyDown(TextView.java:5787)
at android.widget.TextView.onKeyDown(TextView.java:5600)
at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
at android.view.View.dispatchKeyEvent(View.java:8338)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2306)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1682)
at android.app.Activity.dispatchKeyEvent(Activity.java:2699)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2221)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3918)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3880)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3611)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3772)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at andro
02-10 00:12:15.161 1275-1275/com.example.dakota.de_mortgage E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.dakota.de_mortgage, PID: 1275
android.content.res.Resources$NotFoundException: String resource ID #0x12
at android.content.res.Resources.getText(Resources.java:274)
at android.widget.TextView.setText(TextView.java:4122)
at com.example.dakota.de_mortgage.MainActivity.updateCustom(MainActivity.java:99)
at com.example.dakota.de_mortgage.MainActivity.access$100(MainActivity.java:18)
at com.example.dakota.de_mortgage.MainActivity$2.onTextChanged(MainActivity.java:154)
at android.widget.TextView.sendOnTextChanged(TextView.java:7663)
at android.widget.TextView.handleTextChanged(TextView.java:7723)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9440)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:964)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:515)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:454)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:33)
at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
at android.widget.TextView.doKeyDown(TextView.java:5787)
at android.widget.TextView.onKeyDown(TextView.java:5600)
at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
at android.view.View.dispatchKeyEvent(View.java:8338)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2306)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1682)
at android.app.Activity.dispatchKeyEvent(Activity.java:2699)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2221)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3918)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3880)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3611)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3772)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Me
Ini kodenya.
package com.example.dakota.de_mortgage;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.text.TextWatcher;
import android.text.Editable;
public class MainActivity extends ActionBarActivity {
private static final String CUSTOM_YEAR = "CUSTOM_YEAR";
private static final String YEAR_PAY1 = "YEAR_PAY1";
private static final String YEAR_PAY2 = "YEAR_PAY2";
private static final String YEAR_PAY3 = "YEAR_PAY3";
private int currentCustomYear;
private double purchaseGiven;
private double downGiven;
private double interestGiven;
private double moneyRemain;
private TextView customTextView;
private TextView customYearView;
private EditText tenYearResult;
private EditText twntyYearResult;
private EditText thrtyYearResult;
private EditText customYearResult;
private EditText purchaseDown;
private EditText downText;
private EditText interestText;
private SeekBar customSeekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
moneyRemain = 0;
customTextView = (TextView) findViewById(R.id.customTextView);
customYearView = (TextView) findViewById(R.id.customYearView);
tenYearResult = (EditText) findViewById(R.id.tenYearResult);
twntyYearResult = (EditText) findViewById(R.id.twntyYearResult);
thrtyYearResult = (EditText) findViewById(R.id.thrtyYearResult);
customYearResult = (EditText) findViewById(R.id.customYearResult);
purchaseDown = (EditText) findViewById(R.id.purchaseDown);
downText = (EditText) findViewById(R.id.downText);
interestText = (EditText) findViewById(R.id.interestText);
purchaseDown.addTextChangedListener(purchaseWatcher);
downText.addTextChangedListener(downWatcher);
interestText.addTextChangedListener(interestWatcher);
if ( savedInstanceState == null )
{
purchaseGiven = 1.0;
downGiven = 1.0;
interestGiven = 1.0;
currentCustomYear = 18;
}
else
{
purchaseGiven = savedInstanceState.getDouble(YEAR_PAY1);
downGiven = savedInstanceState.getDouble(YEAR_PAY2);
interestGiven = savedInstanceState.getDouble(YEAR_PAY3);
currentCustomYear =
savedInstanceState.getInt(CUSTOM_YEAR);
}
SeekBar customSeekBar = (SeekBar) findViewById(R.id.customSeekBar);
customSeekBar.setOnSeekBarChangeListener(customSeekBarListener);
}
private void updateStandard()
{
moneyRemain = purchaseGiven - downGiven;
tenYearResult.setText(String.format("%.02f", moneyRemain / 10));
twntyYearResult.setText(String.format("%.02f", moneyRemain / 20));
thrtyYearResult.setText(String.format("%.03f", moneyRemain / 30));
}
private void updateCustom()
{
moneyRemain = purchaseGiven - downGiven;
customYearView.setText(currentCustomYear);
customYearResult.setText(String.format("%.02f", moneyRemain / currentCustomYear));
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putInt(CUSTOM_YEAR, currentCustomYear);
outState.putDouble(YEAR_PAY1, purchaseGiven);
outState.putDouble(YEAR_PAY2, downGiven);
outState.putDouble(YEAR_PAY3, interestGiven);
}
private OnSeekBarChangeListener customSeekBarListener = new SeekBar.OnSeekBarChangeListener()
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
currentCustomYear = seekBar.getProgress();
updateCustom();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
}
};
private TextWatcher purchaseWatcher = new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count)
{
try
{
purchaseGiven = Double.parseDouble(s.toString());
}
catch (NumberFormatException e)
{
purchaseGiven = 1.0;
}
updateStandard();
updateCustom();
}
@Override
public void afterTextChanged(Editable s)
{
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
}
};
private TextWatcher downWatcher = new TextWatcher()
{
@Override
public void onTextChanged(CharSequence t, int start,
int before, int count)
{
try
{
downGiven = Double.parseDouble(t.toString());
}
catch (NumberFormatException e)
{
downGiven = 1.0;
}
updateStandard();
updateCustom();
}
@Override
public void afterTextChanged(Editable t)
{
}
@Override
public void beforeTextChanged(CharSequence t, int start, int count,
int after)
{
}
};
private TextWatcher interestWatcher = new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count)
{
try
{
interestGiven = Double.parseDouble(s.toString());
}
catch (NumberFormatException e)
{
interestGiven = 1.0;
}
updateStandard();
updateCustom();
}
@Override
public void afterTextChanged(Editable s)
{
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
}
};
}
Dan inilah xmlnya jika itu penting.
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#FFF" android:id="@+id/tableLayout"
android:stretchColumns="1,2,3" android:padding="5dp">
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow0">
<TextView android:id="@+id/purchase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Purchase" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/purchaseDown"
android:layout_height="wrap_content" android:layout_span="3"
android:inputType="numberDecimal" android:layout_weight="1">
</EditText>
</TableRow>
//row 9
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow9">
<TextView android:id="@+id/down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Down" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/downText"
android:layout_height="wrap_content" android:layout_span="3"
android:inputType="numberDecimal" android:layout_weight="1">
</EditText>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow3">
<TextView android:id="@+id/interest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Interest" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/interestText"
android:layout_height="wrap_content" android:layout_span="3"
android:inputType="numberDecimal" android:layout_weight="1">
</EditText>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow2">
<TextView android:id="@+id/tenYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10 Years" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/tenYearResult"
android:layout_height="wrap_content" android:text="0.0"
android:gravity="center" android:focusable="false"
android:layout_weight="1" android:textSize="14sp"
android:cursorVisible="false" android:longClickable="false"
android:layout_gravity="left">
</EditText>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow1">
<TextView android:id="@+id/twntyYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20 Years" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/twntyYearResult"
android:layout_height="wrap_content" android:text="0.0"
android:gravity="center" android:focusable="false"
android:layout_weight="1" android:textSize="14sp"
android:cursorVisible="false" android:longClickable="false"
android:layout_gravity="left">
</EditText>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow5">
<TextView android:id="@+id/thrtyYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="30 Years" android:textColor="#000"
android:gravity="right" android:paddingRight="5dp"></TextView>
<EditText android:layout_width="wrap_content"
android:id="@+id/thrtyYearResult"
android:layout_height="wrap_content" android:text="0.0"
android:gravity="center" android:focusable="false"
android:layout_weight="1" android:textSize="14sp"
android:cursorVisible="false" android:longClickable="false"
android:layout_gravity="left">
</EditText>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow4">
<TextView android:id="@+id/customTextView"
android:layout_width="wrap_content" android:text="Custom"
android:textColor="#000" android:paddingRight="5dp"
android:gravity="right|center_vertical"
android:layout_height="match_parent" android:paddingBottom="5dp"
android:focusable="false"></TextView>
<SeekBar android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/customSeekBar" android:layout_span="2"
android:progress="18" android:paddingLeft="8dp"
android:paddingRight="8dp" android:paddingBottom="5dp"
android:layout_weight="1"></SeekBar>
<TextView android:id="@+id/customYearView"
android:layout_width="wrap_content" android:text="18"
android:textColor="#000" android:gravity="center_vertical"
android:layout_height="match_parent" android:paddingLeft="5dp"
android:paddingBottom="5dp" android:focusable="false"
android:layout_weight="1"></TextView>
</TableRow>
<TableRow android:layout_height="wrap_content"
android:layout_width="match_parent" android:id="@+id/tableRow6">
<EditText android:layout_width="wrap_content"
android:id="@+id/customYearResult"
android:layout_height="wrap_content" android:text="0.0"
android:gravity="center" android:focusable="false"
android:layout_weight="1" android:textSize="14sp"
android:cursorVisible="false" android:longClickable="false"
android:layout_gravity="left">
</EditText>
</TableRow>
</TableLayout>
Saya telah menghabiskan waktu berjam-jam mencoba memperbaikinya sendiri dan mencari solusi. Saya tidak tahu apakah saya telah melihat ke tempat yang salah atau apa, tetapi saya berada di ujung tanduk.
Terima kasih atas bantuan apa pun yang dapat Anda berikan. Jika ada info lebih lanjut yang diperlukan, silakan tanyakan saja.
Sunting: Menambahkan pesan kesalahan lengkap.
//row 9
pada baris #20. - person Attacktive   schedule 10.02.2015