Исключение при обработке пользовательского AlertDialog с ButterKnife - PullRequest
0 голосов
/ 23 мая 2018

Привет, ребята, я очень смущен. Я потратил более 17 часов, чтобы попытаться решить эту проблему, но без надежды

Я пытаюсь показать пользовательский диалог с > AlertDialog.Builder, когда я нажимаю кнопку, но когда я запускаю приложение и нажимаю кнопкукнопка дает мне это исключение

я пытался ButterKnife @OnClick Anotation и приведение элемента в функции диалога, как Button item = findviewById(R.id.ItemID);

У поиска вопросов есть та же проблема, что и у меня, но бесполезная, пока я не нашел этовопрос несколько инъекций но я обнаружил, что это действительно очень старое May 29, 2014

Исключение

05-23 21:15:56.630 8769-8769/com.w4ma.soft.tamenly E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.w4ma.soft.tamenly, PID: 8769
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.w4ma.soft.tamenly.View.CreateandShow.ShowThePost.ShowCommentDialog(ShowThePost.java:133)
        at com.w4ma.soft.tamenly.View.CreateandShow.ShowThePost.onClick(ShowThePost.java:159)
        at com.w4ma.soft.tamenly.View.CreateandShow.ShowThePost_ViewBinding$1.doClick(ShowThePost_ViewBinding.java:52)
        at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
        at android.view.View.performClick(View.java:5647)
        at android.view.View$PerformClick.run(View.java:22462)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6221)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

Вот мой код

ShowThePost.java

    @Nullable   @BindView(R.id.priceSuggested)   EditText txtSuggestprice;
    @Nullable   @BindView(R.id.txtnotes)  EditText txtNotes;
    @Nullable   @BindView(R.id.btnClose)  Button btnclose;
    @Nullable   @BindView(R.id.btnCommentDone)  Button btndone;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_the_post);
        ButterKnife.bind(this);


    }

    public void ShowCommentDialog() {

        final AlertDialog.Builder alert = new AlertDialog.Builder(context);
        view = getLayoutInflater().inflate(R.layout.create_comment,null);
        alert.setCancelable(false);
        alert.setView(view);

        final AlertDialog dialog = alert.create();

//        final Dialog dialog = new Dialog(context);
//        dialog.setContentView(R.layout.create_comment);
//        dialog.setCancelable(false);
//        dialog.setTitle("This is Dialog");

//      EditText  txtSuggestprice = findViewById(R.id.priceSuggested);
//        EditText txtNotes = findViewById(R.id.txtnotes);
//       Button btnDonee = (Button)findViewById( R.id.btnCommentDone);
//     Button   btnClosee =(Button)findViewById(R.id.btnClose);

//
//        btndone.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//
//            }
//        });
//        btnclose.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                dialog.dismiss();
//
//            }
//        });

        final String Notes = txtNotes.getText().toString();
        final String Description = txtSuggestprice.getText().toString();

        alert.setPositiveButton("Done", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                Toasty.success(context,"Done" + Notes + Description, Toast.LENGTH_LONG).show();

            }
        }).setNegativeButton("Close", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        btndone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show();
            }
        });

        btnclose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Closed", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.show();

     }

@OnClick(R.id.fabComment) 
    public void ShowDialog(){

    ShowCommentDialog();

}

CreatComment.xml - это пользовательский диалог, который должен увеличиваться до значения диалога

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    app:cardCornerRadius="@dimen/_12sdp">


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Comment"
            android:textSize="@dimen/_22sdp"
            android:textColor="#000"
            android:textAlignment="center"
            android:layout_margin="@dimen/_9sdp"
            android:typeface="serif"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/_1sdp"
            android:background="@color/lightgray"
            android:padding="@dimen/_4sdp"/>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/_4sdp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/priceSuggested"
            android:layout_margin="@dimen/_5sdp"
            android:hint="Suggest Price"
            android:inputType="number"
            android:typeface="serif"/>

    </android.support.design.widget.TextInputLayout>


    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/_4sdp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="@dimen/_5sdp"
            android:hint="Notes"
            android:id="@+id/txtnotes"
            android:typeface="serif"/>

    </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Done"
            android:background="@drawable/btncommentstyle"
            android:id="@+id/btnCommentDone"/>


        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Close"
            android:layout_marginTop="@dimen/_4sdp"
            android:background="@drawable/btncommentstyle"
            android:id="@+id/btnClose"/>

    </LinearLayout>
</android.support.v7.widget.CardView>

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вам необходимо также связать представления для create_comment.xml

    view = getLayoutInflater().inflate(R.layout.create_comment,null);
    Butterknife.bind(view,this);
    alert.setCancelable(false);
    alert.setView(view);
    final AlertDialog dialog = alert.create();
0 голосов
/ 23 мая 2018

Исключение вызвано этой строкой:
final String Notes = txtNotes.getText().toString();

Как описано в причине, элемент txtNotes равен null, что означает, что привязка не работает (вероятно,представление с txtnotes идентификатором не найдено).

Из того, что я вижу, вы вызываете ButternKnife.bind() для действия, которое имеет макет activity_show_the_post в качестве представления содержимого.Но представление с txtnotes id на самом деле находится в макете create_comment, о котором ButterKnife ничего не знает и даже не существует в то время.Таким образом, привязка не выполняется, ссылка на txtnotes не создается, и позже вы получаете NPE.

...