3 回答

TA貢獻1850條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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條經(jīng)驗 獲得超3個贊
當您嘗試使用空變量(或尚未初始化的變量)時,會發(fā)生 NullPointerException。
即使onResponse()
從內(nèi)部調(diào)用clicked()
,您也必須記住這onResponse
是在異步調(diào)用中。這僅僅意味著不能保證在調(diào)用onResponse
之前完成執(zhí)行。clicked()
我建議添加Integer.toString(it.size())
到您的onResponse()
方法中。
我希望這有幫助。不要再掙扎了 ;-) 快樂的編碼!
添加回答
舉報