为什么即使对象不为null,代码也为什么会赋予Null指针异常?

时间:2020-01-26 02:46:24

标签: java android nullpointerexception retrofit

代码

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终止。

0 个答案:

没有答案