当前位置: 首页 > 知识库问答 >
问题:

TextView.SetText在给定字符串不为null的情况下引发NullPointerException

盖辉
2023-03-14

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

public class ActivityJokeDetail extends AppCompatActivity {

    public static final String KEY_JOKEDETAILS = "JOKEDETAILS";
    private Joke joke;
    private TextView tvJokeText, tvJokeVote, tvAuthor, tvPostedDate;
    private EditText etNewComment;
    private Button btJokeUp, btJokeDown, btSendComment ;
    private RecyclerView recyclerView;
    private View include;
    private AdapterJokeDetail mAdapter;

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

        joke = getIntent().getParcelableExtra(KEY_JOKEDETAILS);

        include = findViewById(R.id.include);
        tvJokeText = include.findViewById(R.id.tvCommentText);
        tvJokeVote = include.findViewById(R.id.tvCommentVotes);
        tvAuthor = include.findViewById(R.id.tvAuthor);
        tvPostedDate = include.findViewById(R.id.tvPostDate);
        btJokeUp = include.findViewById(R.id.btCommentUp);
        btJokeDown = include.findViewById(R.id.btCommentDown);

        tvJokeText.setText(joke.getText());
        tvJokeVote.setText(Integer.toString(joke.getVotes()));
        // TODO: tvAuthor.setText(joke.getAuthor());
        // TODO: tvPostedDate.setText(joke.getPostedDate().toString());
        etNewComment = findViewById(R.id.etNewComment);
        btSendComment = findViewById(R.id.btSendComment);


        recyclerView = findViewById(R.id.rvComments);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);

        mAdapter = new AdapterJokeDetail(joke.getComments());
        recyclerView.setAdapter(mAdapter);

        btSendComment.setOnClickListener(v -> {
            SendComment();
            mAdapter.notifyDataSetChanged();
        });
    }


    private void SendComment() {
        Comment comment = new Comment(etNewComment.getText().toString(),0,"author"); //TODO: add author
        joke.getComments().add(comment);
    }
}

笑话

package com.example.jokestarapplication;

import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Joke  implements Parcelable {
    private String text;
    private int votes;
    private Date postedDate;
    private String author;
    private String authorId;
    private String category;
    private List<Comment> comments;

    public Joke(String text, Date postedDate, String category, String author, String authorId, List<Comment> arrayList) {
        this.text = text;
        this.votes = 0;
        this.postedDate = postedDate;
        this.author = author;
        this.authorId = authorId;
        this.category = category;
        this.comments = arrayList;
    }


    protected Joke(Parcel in) {
        text = in.readString();
        votes = in.readInt();
        postedDate = new Date(in.readLong());
        author = in.readString();
        authorId = in.readString();
        category = in.readString();
        comments = in.createTypedArrayList(Comment.CREATOR);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(text);
        dest.writeInt(votes);
        dest.writeLong(postedDate.getTime());
        dest.writeString(author);
        dest.writeString(authorId);
        dest.writeString(category);
        dest.writeTypedList(comments);
    }

    public static final Creator<Joke> CREATOR = new Creator<Joke>() {
        @Override
        public Joke createFromParcel(Parcel in) {
            return new Joke(in);
        }

        @Override
        public Joke[] newArray(int size) {
            return new Joke[size];
        }
    };

    public String getText() {
        return text;
    }

    public int getVotes() {
        return votes;
    }

    public Date getPostedDate() {
        return postedDate;
    }

    public String getAuthor() {
        return author;
    }

    public String getAuthorId() {
        return authorId;
    }

    public String getCategory() {
        return category;
    }

    public List<Comment> getComments() {
        return comments;
    }

    @Override
    public int describeContents() {
        return 0;
    }


    public void JokeVoteUp(){
        votes+=1;
    }
    public void JokeVoteDown(){
        votes-=1;
    }
}

出现问题的行位于//TODO中:

共有1个答案

长孙沈义
2023-03-14

假设您在一个活动文件中有完整的布局,并且它们确实存在于布局中。

实际上不需要使用include变量。

使用:

tvAuthor = findViewById(R.id.tvAuthor);
tvAuthor = include.findViewById(R.id.tvAuthor);
 类似资料:
  • a 应该在内部使用类似于: 如何一个

  • 我用了这段代码并运行,但没有输出出来不知道为什么? 但如果正在使用s=“”;则也没有输出。 但是当我使用s=“”;那么输出就来了,为什么会这样呢?

  • 为什么它抛出一个错误?任何帮助都将不胜感激 编辑:

  • 问题内容: 我在何时遇到oracle的问题。 该查询始终返回null,尽管很明显结果应该是第一种情况。我是否缺少有关oracle中字符串比较的内容? 问题答案: 您要再次检查字符串和一个空字符串,从而出现问题;在Oracle中,您最好检查一下您的字符串: 关于Oracle处理空字符串和空值的方式,在这里您可以找到更多信息 一个例子: 给出: 简而言之,谈论时,您可以依靠的唯一支票是:

  • 我是第一次使用代码优先的方法。如果我错过了一些非常基本的东西,请原谅我。 我需要传递连接字符串到DB上下文,但我不能将连接字符串app.config,因为我在类本身调用一个金块,它给我连接字符串。 这种做法正确吗?我无法在本地系统上测试此功能。还是我应该把绳子传给基地 类A():基(连接)

  • 问题内容: 我有需要将Java对象转换为json的要求。 我为此使用Gson,但我需要转换器仅序列化非null或非空值。 例如: 现在我的Gson实例将此对象转换为json看起来像 在上面的打印中,结果是 在这里我只是希望结果是 由于test2为空,otherObject为空,我不希望它们被序列化为json数据。 顺便说一句,我使用的是Groovy / Grails,因此,如果有任何对此的插件会很