我在选择特定列表项时尝试显示警告对话框,而其他人则会打开一个新片段。但是,在插入恶意对话框代码后,将返回错误。我不明白为什么我在“故意”和“#39已经初始化了。可以采取哪些措施来解决这个问题?
变量'意图'可能尚未初始化
FragmentFruitChooser
import itertools
def find_expressions(digits, target):
if not (isinstance(digits, str) or isinstance(digits, list)) or not isinstance(target, int):
raise TypeError
solutions = []
operators = ('', ' + ', ' - ', ' * ', ' / ')
for ops in itertools.product(operators, repeat=len(digits)-1):
s = digits[0] + ''.join(op + digit for op, digit in zip(ops, digits[1:]))
try:
if eval(s) == target:
solutions.append(s + ' == {}'.format(target))
except (ZeroDivisionError, SyntaxError):
pass
print('\n'.join(solutions))
答案 0 :(得分:1)
不太确定您的计划是如何运作的,但是在您的第二个else if
声明中,您的intent
未初始化,但仍然会调用startActivity(intent)
:
} else if (fruit.getFruit().equals(view.getResources().getString(R.string.tomato))) {
AlertDialog ad = new AlertDialog.Builder(getContext())
.create();
ad.setCancelable(false);
ad.setTitle("Seeded Fruit");
ad.setMessage("This fruit contains seeds.");
ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
} else {
intent = new Intent(getActivity(), FruitAppleActivity.class);
}
startActivity(intent);
你可以做@seanAshmore的答案,但它仍然可能导致NPE。我建议在实际调用startActivity()
之前简单地为intent添加一个null检查器,如下所示:
if (intent != null) {
startActivity(intent);
} else {
Log.d(FragmentFruitChooser.class.getSimpleName(), "Intent is null");
}
您可以为每个Intent intent = new Intent(...)
/ if
/ elif
声明单独添加else
,以确保正确无误。但是这是你的代码,所以你可以这样做。 :D希望这会有所帮助。祝好运。 :)
答案 1 :(得分:0)
试试Intent intent = null;而不是意图;这很难说,但我认为这应该可以解决你的问题 -