我有一个活动,并且在单击的方法的最后一行得到了nullPointerException
if not somevar == None
我删除了一些代码以使其简短,但问题是可以在onResponse方法中访问“ it”列表,但在clicked方法中给出了nullPointerException。
这是什么原因?如何存储要在onResponse方法之外使用的列表?
答案 0 :(得分:1)
因为您尝试在初始化列表之前获取列表的大小。
在
Integer.toString(it.size());
因为它还没有初始化
getCompany(s);是异步方法
尝试删除Integer.toString(it.size());
因为不使用也不有用。
公共类MainActivity扩展了AppCompatActivity {
{{1}}
答案 1 :(得分:0)
在clicked
中,您呼叫getCompany
并在其中设置设置了it
的回调。问题是onResponse
最有可能在此之后的某个时间被调用,而apiCall.setCallback
将立即返回。因此,getCompany
立即返回,并且当您尝试访问it
时,null
仍将是doResponse
。
在调用doResponse
之后您想做什么,都应该在.ajaxStop()
中启动。如何执行此操作取决于您的示例中不清楚的实际用例,但也许我的解释可以帮助您自己找到一些想法。如果不是,请在此处开始一个具有更多详细信息的新问题(新问题,因为它与NullPointerExceptions无关)。
答案 2 :(得分:0)
我将直接为您提供一个可能的解决方案,为您提供界面的快速示例
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void clicked(View view) {
getCompany(s, new OnReceiveCompany() {
@Override
public void onReceiveCompany(List<Item> it) {
Integer.toString(it.size());
}
});
}
public void getCompany(String name, final OnReceiveCompany callback) {
apiCall.setCallback(new ApiCall.NetworkCallback() {
@Override
public void onResponse(List<Item> items) {
for (int i = 0; i < items.size(); i++) {
Log.d("Name", it.get(i).getTitle());
}
// make sure this run on UI thread if you need to perform ui operation. You can wrap it with new Hanler(Looper.getMainLooper).post(...
callback.onReceiveCompany(items);
}
});
}
interface OnReceiveCompany {
void onReceiveCompany(List<Item> it);
}
}
为什么您的代码不起作用:
public void clicked(View view) {
// this method is gonna set "it" in the block of code in onResponse, which will happens after you call Integer.toString probably in a separate thread
getCompany(s);
Integer.toString(it.size());
}
答案 3 :(得分:0)
当您尝试使用null变量(或尚未初始化的变量)时,会发生NullPointerException。
即使从onResponse()
内部调用了clicked()
,也要记住onResponse
在异步调用中。这只是意味着不能保证onResponse
将在调用clicked()
之前完成执行。
我建议将Integer.toString(it.size())
添加到您的onResponse()
方法中。
我希望这会有所帮助。不再挣扎;-)编码愉快!