gpt4 book ai didi

java - hashmap.get() 的拆箱会产生 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 09:36:47 25 4
gpt4 key购买 nike

我正在使用 HashMap 从另一个类获取数据。我检查 logcat 并发现 hashmap 的数据已设置并且包含 key 。但是,当我尝试从其他类获取 HashMap 时,我收到 NullPointerException,当我尝试检查映射是否包含该键时,它不包含该键


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.continueItem:
CustomAdapter a = new CustomAdapter();
CustomAdapter.InputTextListener i = a.new InputTextListener();
HashMap<String, Integer> hashMap = i.getHashMap();
inputTime = hashMap.get("EDITTEXT VALUE");
Log.d(TAG, "onOptionsItemSelected: " + hashMap.get("EDITTEXT VALUE"));
Log.d(TAG, "onOptionsItemSelected: " + hashMap.containsKey("EDITTEXT VALUE"));
retrieveInputTime(inputTime);
break;

}
return super.onOptionsItemSelected(item);
}


public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

private static final String TAG = "CustomAdapter";
private ArrayList<Integer> mWorkTW = new ArrayList<>();
private ArrayList<Integer> mWorkET = new ArrayList<>();
private ArrayList<Integer> mRestTW = new ArrayList<>();
private ArrayList<Integer> mRestET = new ArrayList<>();
private Context mContext;
private int numberOfIntervals;

public CustomAdapter() {

}

public CustomAdapter(Context context, ArrayList<Integer> mWorkTW, ArrayList<Integer> mWorkET, ArrayList<Integer> mRestTW, ArrayList<Integer> mRestET, int numberOfIntervals) {

this.mWorkTW = mWorkTW;
this.mWorkET = mWorkET;
this.mRestTW = mRestTW;
this.mRestET = mRestET;
this.mContext = context;
this.numberOfIntervals = numberOfIntervals;
//this.inputTimeIntegerWET = inputTimeIntegerWET;

Log.d(TAG, "CustomAdapter: " + numberOfIntervals);
}


@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View customView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.time_row, viewGroup, false);
ViewHolder holder = new ViewHolder(customView, new InputTextListener());
return holder;

}

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
Log.d(TAG, "onBindViewHolder: called");
viewHolder.workTextView.setText(R.string.work_text_view);
viewHolder.restTextView.setText(R.string.rest_text_view);
viewHolder.workEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
viewHolder.workEditText.setHint("");
else
viewHolder.workEditText.setHint(mWorkET.get(viewHolder.getAdapterPosition()));
}
});

viewHolder.restEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
viewHolder.restEditText.setHint("");
else
viewHolder.restEditText.setHint(mRestET.get(viewHolder.getAdapterPosition()));
}
});
}

@Override
public int getItemCount() {
Log.d(TAG, "" + numberOfIntervals);
return numberOfIntervals;
}

public class ViewHolder extends RecyclerView.ViewHolder {

public InputTextListener inputTextListener;
TextView workTextView;
EditText workEditText;
TextView restTextView;
EditText restEditText;
ConstraintLayout parentLayout;




public ViewHolder(@NonNull View itemView, InputTextListener inputTextListener) {
super(itemView);
workTextView = itemView.findViewById(R.id.workTextView);
workEditText = itemView.findViewById(R.id.workEditText);
restTextView = itemView.findViewById(R.id.restTextView);
restEditText = itemView.findViewById(R.id.restEditText);
parentLayout = itemView.findViewById(R.id.parentLayout);
this.inputTextListener = inputTextListener;


workEditText.addTextChangedListener(inputTextListener);
}
}

class InputTextListener implements TextWatcher {
String inputTimeString;

int inputTime;
HashMap<String, Integer> hashMap = new HashMap<String, Integer>();

public HashMap<String, Integer> getHashMap() {
return hashMap;
}

public InputTextListener() {
}

public void setHashMap(HashMap<String, Integer> hashMap) {
this.hashMap = hashMap;
}

/*public int getInputTime() {
return inputTime;
}*/

public void setInputTime(int inputTime) {
this.inputTime= inputTime;
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
Log.d(TAG, "onTextChanged: I've made it to here!");
inputTimeString = s.toString().trim();
inputTime = Integer.parseInt(inputTimeString);
setInputTime(inputTime);
hashMap.put("EDITTEXT VALUE", inputTime);
Log.d(TAG, "onTextChanged: " + inputTime);

int bla = inputTime + 2;
Log.d(TAG, "onTextChanged: " + bla);
Log.d(TAG, "onTextChanged: " + hashMap.containsKey("EDITTEXT VALUE"));
Log.d(TAG, "onTextChanged: " + hashMap.get("EDITTEXT VALUE"));
setHashMap(hashMap);

} catch (NumberFormatException NFE) {
mWorkET = null;
}



}

@Override
public void afterTextChanged(Editable s) {

}


}
}

我期望 HashMap 能够访问其他类的数据。

最佳答案

以下是您发布的一些代码:

CustomAdapter a = new CustomAdapter();
CustomAdapter.InputTextListener i = a.new InputTextListener();
HashMap<String, Integer> hashMap = i.getHashMap();

这将创建一个 CustomAdapter 类的新实例,然后创建一个 InputTextListener 类的新实例,最后检索 HashMap 存储在文本监听器内。

同样,这一切都发生在这些类的实例上。因此,HashMap 是空的(因为没有任何内容填充它)。

您可能假设 i 与您在应用程序中其他地方使用的监听器实例“相同”。不是这种情况。您将需要以某种方式访问​​该监听器,而不是创建一个新实例。

看看你的代码,这似乎不太可行。每个 ViewHolder 都有自己的 InputTextListener 实例...您的选项菜单如何知道您正在尝试与哪个 ViewHolder 交互?

您很可能需要回到绘图板并想出一种不同的方法来解决您正在尝试的任何问题。

关于java - hashmap.get() 的拆箱会产生 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com