代码
public class OrderTableActivity extends AppCompatActivity {
private List<String> bidList = new ArrayList<>();
private List<String> askList = new ArrayList<>();
private RecyclerView recyclerView;
private OrderTableAdapter adapter;
private BidsAsks bidsAsks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_table);
bidsAsks = populateLists(); //makes async call and gets data from API and stores in BidsAsks object
recyclerView=(RecyclerView)findViewById(R.id.recyclerView);
adapter = new OrderTableAdapter(OrderTableActivity.this);
recyclerView.setLayoutManager(new LinearLayoutManager(OrderTableActivity.this));
recyclerView.setAdapter(adapter);
populate(); //populates the data lists
adapter.setItemList(bidList, askList);
Log.i("TAG", "oncreate complete");
// adapter.notifyDataSetChanged();
}
//get data dummy``
private List<String> getData() {
List<String> data = new ArrayList<>();
for(int i=0; i<20; i++){
data.add("A"+i);
}
return data;
}
private void populate(){
List<List<String>> bids = bidsAsks.getBids(); //NULL pointer exception
List<List<String>> asks = bidsAsks.getAsks();
for(int i=0; i<100 && i<asks.size() ;i++){
//get ith list
String bid_value = bids.get(i).get(0);
String ask_value = asks.get(i).get(0);
//Log.i("X", bid_value);
//Log.i("X", ask_value);
bidList.add(bid_value);
askList.add(ask_value);
//dataList.add(map);
}
Log.i("size", bidList.size()+"");
Log.i("size", askList.size()+"");
}
//works fine and gets the data and stores in the object
private BidsAsks populateLists(){
Retrofit retrofit = RetrofitClientInstance.getRetrofitInstance();
JsonPlaceholderApi jsonPlaceholderApi = retrofit.create(JsonPlaceholderApi.class);
Call<BidsAsks> call = jsonPlaceholderApi.getBidsAndAsksData();
call.enqueue(new Callback<BidsAsks>() {
@Override
public void onResponse(Call<BidsAsks> call, Response<BidsAsks> response) {
if(response.isSuccessful()){
bidsAsks = response.body();
Log.i("TAG", bidsAsks.toString()+" found");
}else{
Log.i("err", "err while parsing");
}
}
@Override
public void onFailure(Call<BidsAsks> call, Throwable t) {
}
});
return bidsAsks;
}
}
错误
错误: java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.cryptoinfo / com.example.cryptoinfo.OrderTableActivity}:java.lang.NullPointerException:尝试调用虚拟方法'java.util.List com.example.cryptoinfo。空对象引用上的BidsAsks.getBids()' 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2016) 在android.os.Handler.dispatchMessage(Handler.java:107) 在android.os.Looper.loop(Looper.java:214) 在android.app.ActivityThread.main(ActivityThread.java:7356) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:492) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.util.List com.example.cryptoinfo.BidsAsks.getBids()' 在com.example.cryptoinfo.OrderTableActivity.populate(OrderTableActivity.java:62) 在com.example.cryptoinfo.OrderTableActivity.onCreate(OrderTableActivity.java:36) 在android.app.Activity.performCreate(Activity.java:7802) 在android.app.Activity.performCreate(Activity.java:7791) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2016) 在android.os.Handler.dispatchMessage(Handler.java:107) 在android.os.Looper.loop(Looper.java:214) 在android.app.ActivityThread.main(ActivityThread.java:7356) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:492) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) I / Process:正在发送信号。 PID:1078 SIG:9 进程1078终止。