Mengambil bidang editteks dan menampilkannya dalam TextView

Saya relatif baru dalam coding tetapi memiliki pengalaman di Java dan Android. Saya mempunyai masalah yang sangat mendasar yang telah saya lakukan berulang kali tetapi karena alasan tertentu, kejadian ini tidak berhasil!

Saya memiliki bidang edittext yang diisi oleh pengguna. Ketika tombol enter ditekan, aplikasi kemudian mengambilnya dan menyimpannya sebagai String. String kemudian digunakan untuk mengisi TextView dengan input pengguna.

Saya telah membuat findviewbyids, saya telah mengatur String agar sama dengan input edittext dan kemudian mengatur teks dalam tampilan teks menjadi String sesuai kode di bawah ini. Saya telah memeriksa aplikasi sebelumnya yang saya buat dan ini selalu berhasil sebelumnya...

package com.example.android.golfhandicap;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

EditText playerName;
TextView playerOneName;
String name;
int handicap;
EditText playerHandicap;
TextView playerOneHcp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.front_page);

}
//set view by IDs
public void views() {
    playerName = findViewById(R.id.inputPlayerName);
    playerOneName = findViewById(R.id.playerOneName);
    playerHandicap = findViewById(R.id.inputPlayerHcp);
    playerOneHcp = findViewById(R.id.playerOneHcp);

}

/**
 * Add the codes for the button to navigate around the app
 */


public void enterScore1(View view) {
setContentView(R.layout.front_page);
}

public void addPlayer(View view) {
    setContentView(R.layout.new_player);
}

public void addScore(View view) {
    setContentView(R.layout.input_page);
}


public void enterPlayer(View view) {

    views();


    name = playerName.getText().toString();
//handicap = Integer.parseInt(playerHandicap.getText().toString());



playerOneName.setText(name);
//playerOneHcp.setText(handicap);



    Toast.makeText(this, "player name is " + name + " and handicap is 
" + handicap , Toast.LENGTH_SHORT).show();
    setContentView(R.layout.front_page);



}
}

XML untuk halaman dengan tampilan teks yang ingin saya tampilkan String di:

<?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:visibility="visible"
tools:context=".MainActivity">

<TextView
    android:id="@+id/appName2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:text="Golf handicap"
    android:textAlignment="center"
    android:textColor="@color/colorPrimaryDark"
    android:textSize="24sp"
    android:textStyle="bold"
    android:visibility="visible"
    android:editable="false"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/playerOneName"
    android:layout_width="136dp"
    android:layout_height="30dp"
    android:layout_marginStart="8dp"
    android:editable="false"
    android:layout_marginTop="32dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appName2" />

<TextView
    android:id="@+id/playerOneName2"
    android:editable="false"
    android:layout_width="136dp"
    android:layout_height="30dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:visibility="invisible"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/playerOneName3" />

<TextView
    android:id="@+id/playerOneName3"
    android:editable="false"
    android:layout_width="136dp"
    android:layout_height="30dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:visibility="invisible"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/playerOneName" />

<Button
    android:id="@+id/addScore"
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:layout_marginBottom="16dp"
    android:background="@android:color/holo_green_light"
    android:onClick="addScore"
    android:text="Add new score"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/addPlayer" />

<Button
    android:id="@+id/addPlayer"
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:layout_marginBottom="16dp"
    android:background="@android:color/holo_green_light"
    android:onClick="addPlayer"
    android:text="Add new player"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/addScore"
    app:layout_constraintStart_toStartOf="parent" />

<TextView
    android:id="@+id/playerOneHcp"
    android:layout_width="43dp"
    android:layout_height="30dp"
    android:layout_marginStart="31dp"
    android:layout_marginTop="32dp"
    android:editable="false"
    android:ems="10"
    android:inputType="number"
    android:textAlignment="center"
    android:visibility="visible"
    app:layout_constraintStart_toEndOf="@+id/playerOneName"
    app:layout_constraintTop_toBottomOf="@+id/appName2" />

<TextView
    android:id="@+id/editText2"
    android:editable="false"
    android:layout_width="43dp"
    android:layout_height="30dp"
    android:layout_marginStart="31dp"
    android:layout_marginTop="24dp"
    android:ems="10"
    android:inputType="number"
    android:textAlignment="center"
    android:visibility="invisible"
    app:layout_constraintStart_toEndOf="@+id/playerOneName2"
    app:layout_constraintTop_toBottomOf="@+id/editText3" />

<TextView
    android:id="@+id/editText3"
    android:editable="false"
    android:layout_width="43dp"
    android:layout_height="30dp"
    android:layout_marginStart="31dp"
    android:layout_marginTop="24dp"
    android:ems="10"
    android:inputType="number"
    android:textAlignment="center"
    android:visibility="invisible"
    app:layout_constraintStart_toEndOf="@+id/playerOneName3"
    app:layout_constraintTop_toBottomOf="@+id/playerOneHcp" />

</android.support.constraint.ConstraintLayout>

XML untuk tata letak dengan edittext yang saya dapatkan masukan penggunanya:

<?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">


<TextView
    android:id="@+id/enterHcpText"
    android:layout_width="136dp"
    android:layout_height="50dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:editable="false"
    android:text="Current handicap :"
    android:textAlignment="center"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/enterAgeText" />

<TextView
    android:id="@+id/enterAgeText"
    android:layout_width="136dp"
    android:layout_height="50dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:editable="false"
    android:text="Player age :"
    android:textAlignment="center"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/enterNameText" />

<TextView
    android:id="@+id/enterNameText"
    android:layout_width="136dp"
    android:layout_height="50dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="32dp"
    android:editable="false"
    android:text="Player name :"
    android:textAlignment="center"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appName3" />

<TextView
    android:id="@+id/appName3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:editable="false"
    android:text="Golf handicap"
    android:textAlignment="center"
    android:textColor="@color/colorPrimaryDark"
    android:textSize="24sp"
    android:textStyle="bold"
    android:visibility="visible"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<EditText
    android:id="@+id/inputPlayerName"
    android:layout_width="130dp"
    android:layout_height="50dp"
    android:layout_marginTop="32dp"
    android:layout_marginEnd="33dp"
    android:maxLength="25"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appName3" />

<EditText
    android:id="@+id/inputPlayerAge"
    android:layout_width="130dp"
    android:layout_height="50dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="33dp"
    android:inputType="number"
    android:maxLength="2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/inputPlayerName" />

<EditText
    android:id="@+id/inputPlayerHcp"
    android:layout_width="130dp"
    android:layout_height="50dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="33dp"
    android:inputType="number"
    android:maxLength="2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/inputPlayerAge" />

<Button
    android:id="@+id/enterPlayer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="148dp"
    android:layout_marginTop="96dp"
    android:layout_marginEnd="148dp"
    android:onClick="enterPlayer"
    android:text="Enter"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/inputPlayerHcp" />

</android.support.constraint.ConstraintLayout>

Jika saya mengomentari baris p1Name.setText(name); maka itu berfungsi dengan baik, saya bersulang untuk memeriksa nama sudah diambil dan nama ditetapkan sebagai input. Jadi sepertinya ada yang salah dengan p1Name. Saya telah memeriksa dan memeriksa tiga kali semua ID sudah benar.

Saya telah menghabiskan lebih dari satu jam sekarang untuk mencoba mencari tahu dan tidak dapat melihat kesalahan apa yang saya lakukan!

Ini adalah baris yang saya dapatkan di logcat (Ini semua baris yang ditunjukkan dengan warna merah)

2019-01-24 23:29:39.376 9545-9545/com.example.android.golfhandicap E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.golfhandicap, PID: 9545
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:6294)
    at android.view.View$PerformClick.run(View.java:24770)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
    at com.example.android.golfhandicap.MainActivity.enterPlayer(MainActivity.java:65)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Bantuan apa pun akan diterima dengan senang hati.


person Danny Jebb    schedule 24.01.2019    source sumber
comment
ada kesalahan di logcat? silakan posting tag xml untuk id playerOneName   -  person Kartik    schedule 25.01.2019
comment
Sepertinya saya mendapatkan 2 kesalahan saat melihat Logcat (Belum pernah menggunakannya sebelumnya jadi tidak yakin apakah ini membantu,   -  person Danny Jebb    schedule 25.01.2019
comment
Kesalahan pertama adalah InvocationTargetException, kesalahan kedua adalah pengecualian nullpointer.   -  person Danny Jebb    schedule 25.01.2019
comment
Ini adalah xml untuk tampilan teks playerOneName ‹TextView android:id=@+id/playerOneName android:layout_width=136dp android:layout_height=30dp android:layout_marginStart=8dp android:editable=false android:layout_marginTop=32dp android:visibility=invisible app:layout_constraintStart_toStartOf=aplikasi induk:layout_constraintTop_toBottomOf=@+id/appName2 /›   -  person Danny Jebb    schedule 25.01.2019
comment
Saya masih baru mengenal Android studio, saya baru saja memulai modul Java sebagai bagian dari gelar saya. Logcat saya berisi banyak sekali informasi, 2 kesalahan di atas adalah masalah yang saya yakini. Tapi saya belum mempelajari kesalahan logcat.   -  person Danny Jebb    schedule 25.01.2019
comment
Silakan edit postingan asli Anda dan tempelkan semua kode relevan Anda di sana. Itu akan menjadi: MainActivity dan XML untuk Aktivitas Utama (atau file aktivitas yang relevan). Sulit untuk mengetahui masalahnya tanpa kode lengkap   -  person S. Czop    schedule 25.01.2019
comment
Terima kasih saya telah mengedit pertanyaan awal. Beberapa file xml belum sepenuhnya selesai tetapi ini adalah tampilan teks dan editteks yang belum saya coba gunakan.   -  person Danny Jebb    schedule 25.01.2019
comment
Kemungkinan duplikat Apa itu NullPointerException, dan bagaimana caranya memperbaikinya?   -  person Kartik    schedule 25.01.2019


Jawaban (1)


Masalahnya hanya karena hal berikut:

  1. Anda belum mengikat tampilan dengan findViewById. Ini karena kode berikut:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.front_page);
    
        // Here you haven't bind the view.
    }
    

Anda harus langsung mengikat tampilan dengan metode views() Anda. Jadi, ubah kodenya menjadi ini:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.front_page);

        // bind the view.
        views();
    }
  1. Anda mengubah tampilan tata letak setiap kali tombol diklik dengan metode ini:

    public void addScore(View view) {
        setContentView(R.layout.input_page);
    }
    

yang menjadi salah satu sumber masalah Anda. Pertama, ini tidak disarankan karena Anda menggambar ulang seluruh tata letak saat memanggil setContentView. Kedua, Anda perlu memastikan semua tata letak onClick diterapkan dalam kode Anda.

  1. Terakhir, Anda lebih baik menggunakan setOnClickListener dalam kode daripada atribut onClick dalam tata letak. Itu karena Anda harus memisahkan antara logika dan UI.
person ישו אוהב אותך    schedule 25.01.2019
comment
Terima kasih banyak atas tanggapan Anda. Saya telah mengubah findviewbtids menjadi metode onCreate tetapi itu tidak banyak membantu. Beberapa hal lain yang Anda sebutkan tidak saya ketahui. Saya telah menggunakan onClickListener di aplikasi lain tetapi sebagian besar disalin dari solusi online. Saya perlu membaca tentang cara melakukannya dengan benar - person Danny Jebb; 26.01.2019
comment
Singkat cerita, Anda hanya perlu mengatur layout dan mengikat tampilan pada layout ke kode sebelum tombol onClick dapat berfungsi. Anda mengalami masalah hanya karena Anda belum memahami cara kerja kode Android. Luangkan waktu Anda untuk belajar lebih dalam;) - person ישו אוהב אותך; 26.01.2019