3 回答
TA贡献1850条经验 获得超11个赞
因为您尝试在初始化之前获取列表的大小。在 Integer.toString(it.size());
因为它还没有初始化 getCompany(s); 是异步方法尝试删除 Integer.toString(it.size());
因为在不使用和没有用处。公共类 MainActivity 扩展 AppCompatActivity {
List<Item> it;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void clicked(View view) {
getCompany(s);
}
public void getCompany(String name) {
apiCall.setCallback(new ApiCall.NetworkCallback() {
@Override
public void onResponse(List<Item> items) {
it = items;
for (int i = 0; i < items.size(); i++) {
Log.d("Name", it.get(i).getTitle());
}
}
});
}
TA贡献1829条经验 获得超9个赞
我会直接为您提供一个可能的解决方案,它为您提供一个界面的快速示例
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());
}
TA贡献1712条经验 获得超3个赞
当您尝试使用空变量(或尚未初始化的变量)时,会发生 NullPointerException。
即使onResponse()
从内部调用clicked()
,您也必须记住这onResponse
是在异步调用中。这仅仅意味着不能保证在调用onResponse
之前完成执行。clicked()
我建议添加Integer.toString(it.size())
到您的onResponse()
方法中。
我希望这有帮助。不要再挣扎了 ;-) 快乐的编码!
添加回答
举报