в макете ниже, я создал два ввода текста с использованием библиотеки дизайна материалов.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:background="@color/loginPageBackgroundColor"
tools:context=".Authentication.LoginFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical"
android:padding="24dp"
android:paddingTop="16dp">
<ImageView
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="48dp"
android:layout_marginBottom="16dp"
android:tint="?android:attr/textColorPrimary"
app:srcCompat="@drawable/shr_logo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="132dp"
android:text="@string/login_logo_text"
android:textAppearance="@style/TextAppearance.homayoun.Title"
android:textSize="16sp" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/username_text_input"
style="@style/Widget.homayoun.TextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/username_hint">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/username_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_text_input"
style="@style/Widget.homayoun.TextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:hint="@string/password_hint"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_gravity="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cancel_button"
android:text="@string/cancel_text"
style="@style/Widget.homayoun.Button.TextButton" />
<com.google.android.material.button.MaterialButton
android:layout_marginLeft="20dp"
android:id="@+id/signup_button"
style="@style/Widget.homayoun.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sign_up_button" />
</LinearLayout>
</LinearLayout>
</ScrollView>
Я пытаюсь получить текст из TextInputLayout, чтобы использовать его в своей базе данных Sqlite для практики. заметить, что с классом Sqlite проблем нет.
package com.homayoun_rad.thisisfuckingmine.Authentication;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.google.android.material.button.MaterialButton;
import com.homayoun_rad.thisisfuckingmine.Database.SqlOpenHelper;
import com.homayoun_rad.thisisfuckingmine.MainActivity;
import com.homayoun_rad.thisisfuckingmine.R;
/**
* A simple {@link Fragment} subclass.
*/
public class SignupFragment extends Fragment {
public SignupFragment() {
// Required empty public constructor
}
private SqlOpenHelper sqlOpenHelper;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_signup, container, false);
// initializing database
sqlOpenHelper = new SqlOpenHelper(getActivity());
MaterialButton cancelButton = view.findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity) getActivity()).navigateTo(new LoginFragment(), false);
}
});
MaterialButton signupButton = view.findViewById(R.id.signup_button);
signupButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseHandler(v);
Toast.makeText(getContext(), "Account Created!", Toast.LENGTH_SHORT).show();
((MainActivity) getActivity()).navigateTo(new LoginFragment(), false);
}
});
return view;
}
private void databaseHandler(@org.jetbrains.annotations.NotNull View view) {
SQLiteDatabase sqLiteDatabase = sqlOpenHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
MaterialButton usernameText = view.findViewById(R.id.username_text_input);
MaterialButton passwordText = view.findViewById(R.id.password_text_input);
String username = usernameText.getText().toString();
String password = passwordText.getText().toString();
contentValues.put(SqlOpenHelper.FeedEntry.USERNAME, username);
contentValues.put(SqlOpenHelper.FeedEntry.PASSWORD, password);
sqLiteDatabase.insert(SqlOpenHelper.FeedEntry.TABLE_NAME, null, contentValues);
}
}
в вспомогательном методе базы данных. использование этого вызывает следующую ошибку:
2020-03-05 12:17:10.903 29223-29223/com.homayoun_rad.thisisfuckingmine E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.homayoun_rad.thisisfuckingmine, PID: 29223
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence com.google.android.material.button.MaterialButton.getText()' on a null object reference
at com.homayoun_rad.thisisfuckingmine.Authentication.SignupFragment.databaseHandler(SignupFragment.java:68)
at com.homayoun_rad.thisisfuckingmine.Authentication.SignupFragment.access$000(SignupFragment.java:22)
at com.homayoun_rad.thisisfuckingmine.Authentication.SignupFragment$2.onClick(SignupFragment.java:52)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
at android.view.View$PerformClick.run(View.java:26104)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
что я сделал не так? Как я должен получить входной текст из этого editText?