如何解决"java.lang.NumberFormatException: s == null at java.lang.Integer.parseInt"
How to solve "java.lang.NumberFormatException: s == null at java.lang.Integer.parseInt"
我尝试了不同的解决方案,但都失败了,我需要知道我的代码有什么问题以及它应该是什么。
这是我的logcat错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: freemig.freemigmessenger, PID: 31699
java.lang.NumberFormatException: s == null
at java.lang.Integer.parseInt(Integer.java:570)
at java.lang.Integer.parseInt(Integer.java:643)
它发生在按钮点击事件上
private class SentMessageHolder extends RecyclerView.ViewHolder {
TextView messageText, timeText;
ImageButton iB;
MsgDltAPIService msgDltAPIService;
String rec_id;
String content_id;
int[] ids = new int[100];
SentMessageHolder(final View itemView) {
super(itemView);
messageText = itemView.findViewById(R.id.text_message_body);
timeText = itemView.findViewById(R.id.text_message_time);
iB = itemView.findViewById(R.id.sentMessageTextDelete);
msgDltAPIService = RestClient.getClient().create(MsgDltAPIService.class);
iB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userAuthenticationKey = new UserAuthenticationKey(mContext.getApplicationContext());
sharedPreferences = mContext.getApplicationContext().getSharedPreferences("user authentication", MODE_PRIVATE);
editor = sharedPreferences.edit();
ids[0] = Integer.parseInt(content_id);
final MsgDltRequest msgDltRequest = new MsgDltRequest(
ids,
rec_id);
Call<MsgDltResponse> call =
msgDltAPIService.msgDlt(userAuthenticationKey.getUserTokenKey(),
msgDltRequest);
call.enqueue(new Callback<MsgDltResponse>() {
@Override
public void onResponse(Call<MsgDltResponse> call, Response<MsgDltResponse> response) {
Toast.makeText(mContext.getApplicationContext(), "" + response.body().getData(),
Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<MsgDltResponse> call, Throwable t) {
Toast.makeText(mContext.getApplicationContext(), "please try again",
Toast.LENGTH_LONG).show();
}
});
}
});
}
void bind(Datum2 message) {
messageText.setText(message.getMsg());
// Format the stored timestamp into a readable String using method.
timeText.setText(message.getCreatedAt().getFormatTime());
content_id.valueOf(message.getContentId().toString()) ;
if (! message.getOriginatorId().equals(userID)){
rec_id.valueOf(message.getOriginatorId());
}
else {
rec_id = null;
}
}
}
这行给我错误
ids[0] = Integer.parseInt(content_id);
我之前说的尝试了几种方法,但我的代码应该是什么? My full class is here。还有一件事我正在开发适配器 Class。
您可以像这样使用TextUtils
实用方法,
if (!TextUtils.isEmpty(content_id) && TextUtils.isDigitsOnly(content_id)) {
ids[0] = Integer.parseInt(content_id);
} else {
ids[0] = 0;
}
并且在设置 content_id 时你可以这样设置,content_id = message.getContentId().toString();
而不是 content_id.valueOf(message.getContentId().toString()) ;
将语句放在try
和catch
块中处理异常。
try{
ids[0] = Integer.parseInt(content_id);
}catch(NumberFormatException ex){ // handle your exception
...
}
或者简单的整数匹配-
String input=...;
String pattern ="-?\d+";
if(input.matches("-?\d+")){ // any positive or negative integer or not!
...
}
Log 说这是一个 NumberFormatException 并且您尝试转换为 int 的字符串为 null。 Integer.parseInt(content_id) 仅当 content_id 不为 null 并且它是一个有效整数时才有效。
所以在你的情况下,你可以添加一个检查来查看字符串是否为空。如果字符串不为 null 并且仍然给出 NumberFormatException,则该字符串不是有效的整数,可以使用 try catch 语句处理。
if (content_id != null) {
try {
ids[0] = Integer.parseInt(content_id);
} catch(NumberFormatException e) {
// Deal with the situation like
ids[0] = 0;
}
}
String str = arraylist.get(position); //check your value from Arraylist
if (!TextUtils.isEmpty(str) && TextUtils.isDigitsOnly(str)) {
yourTextview.setText(str);
} else {
yourTextview.setText("Your default value");
}
我尝试了不同的解决方案,但都失败了,我需要知道我的代码有什么问题以及它应该是什么。
这是我的logcat错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: freemig.freemigmessenger, PID: 31699
java.lang.NumberFormatException: s == null
at java.lang.Integer.parseInt(Integer.java:570)
at java.lang.Integer.parseInt(Integer.java:643)
它发生在按钮点击事件上
private class SentMessageHolder extends RecyclerView.ViewHolder {
TextView messageText, timeText;
ImageButton iB;
MsgDltAPIService msgDltAPIService;
String rec_id;
String content_id;
int[] ids = new int[100];
SentMessageHolder(final View itemView) {
super(itemView);
messageText = itemView.findViewById(R.id.text_message_body);
timeText = itemView.findViewById(R.id.text_message_time);
iB = itemView.findViewById(R.id.sentMessageTextDelete);
msgDltAPIService = RestClient.getClient().create(MsgDltAPIService.class);
iB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userAuthenticationKey = new UserAuthenticationKey(mContext.getApplicationContext());
sharedPreferences = mContext.getApplicationContext().getSharedPreferences("user authentication", MODE_PRIVATE);
editor = sharedPreferences.edit();
ids[0] = Integer.parseInt(content_id);
final MsgDltRequest msgDltRequest = new MsgDltRequest(
ids,
rec_id);
Call<MsgDltResponse> call =
msgDltAPIService.msgDlt(userAuthenticationKey.getUserTokenKey(),
msgDltRequest);
call.enqueue(new Callback<MsgDltResponse>() {
@Override
public void onResponse(Call<MsgDltResponse> call, Response<MsgDltResponse> response) {
Toast.makeText(mContext.getApplicationContext(), "" + response.body().getData(),
Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<MsgDltResponse> call, Throwable t) {
Toast.makeText(mContext.getApplicationContext(), "please try again",
Toast.LENGTH_LONG).show();
}
});
}
});
}
void bind(Datum2 message) {
messageText.setText(message.getMsg());
// Format the stored timestamp into a readable String using method.
timeText.setText(message.getCreatedAt().getFormatTime());
content_id.valueOf(message.getContentId().toString()) ;
if (! message.getOriginatorId().equals(userID)){
rec_id.valueOf(message.getOriginatorId());
}
else {
rec_id = null;
}
}
}
这行给我错误
ids[0] = Integer.parseInt(content_id);
我之前说的尝试了几种方法,但我的代码应该是什么? My full class is here。还有一件事我正在开发适配器 Class。
您可以像这样使用TextUtils
实用方法,
if (!TextUtils.isEmpty(content_id) && TextUtils.isDigitsOnly(content_id)) {
ids[0] = Integer.parseInt(content_id);
} else {
ids[0] = 0;
}
并且在设置 content_id 时你可以这样设置,content_id = message.getContentId().toString();
而不是 content_id.valueOf(message.getContentId().toString()) ;
将语句放在try
和catch
块中处理异常。
try{
ids[0] = Integer.parseInt(content_id);
}catch(NumberFormatException ex){ // handle your exception
...
}
或者简单的整数匹配-
String input=...;
String pattern ="-?\d+";
if(input.matches("-?\d+")){ // any positive or negative integer or not!
...
}
Log 说这是一个 NumberFormatException 并且您尝试转换为 int 的字符串为 null。 Integer.parseInt(content_id) 仅当 content_id 不为 null 并且它是一个有效整数时才有效。
所以在你的情况下,你可以添加一个检查来查看字符串是否为空。如果字符串不为 null 并且仍然给出 NumberFormatException,则该字符串不是有效的整数,可以使用 try catch 语句处理。
if (content_id != null) {
try {
ids[0] = Integer.parseInt(content_id);
} catch(NumberFormatException e) {
// Deal with the situation like
ids[0] = 0;
}
}
String str = arraylist.get(position); //check your value from Arraylist
if (!TextUtils.isEmpty(str) && TextUtils.isDigitsOnly(str)) {
yourTextview.setText(str);
} else {
yourTextview.setText("Your default value");
}