Retrofit2 ссылка на объект Java нулевой указатель - PullRequest
0 голосов
/ 26 сентября 2018

Привет. Я пытаюсь проанализировать JSON с помощью Retrofit, сохранить его в Sqlite и отобразить в RecyclerView.Однако мое приложение падает, когда я пытаюсь открыть активность.Ниже приведены мои полные коды связанной деятельности.Не могли бы вы помочь мне с решением проблемы?Спасибо

public class InventoryProductActivity extends AppCompatActivity implements InventoryProductListAdapter.CustomClickListener {

    private static final String TAG = InventoryProductActivity.class.getSimpleName();
    private InventoryProductListAdapter mInventoryProductListAdapter;
    private RecyclerView mRecyclerView;
    private RetrofitClient mRetrofitClient;
    LinearLayoutManager mLinearLayoutManager;
    private WarehouseDatabase mDatabase;
    private ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inventory_product);
        configViews();

        mRetrofitClient = new RetrofitClient();
        mDatabase = new WarehouseDatabase(this);

        loadInventoryProductFeed();
    }

    private void configViews() {
        mRecyclerView = findViewById(R.id.recycler_view_inventory_product);
        mRecyclerView.setHasFixedSize(true);

        mLinearLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLinearLayoutManager);

        mInventoryProductListAdapter = new InventoryProductListAdapter(this);
        mRecyclerView.setAdapter(mInventoryProductListAdapter);
    }

    private void loadInventoryProductFeed() {
        mProgressDialog = new ProgressDialog(InventoryProductActivity.this);
        mProgressDialog.setMessage("Loading Inventory Data...");
        mProgressDialog.setCancelable(true);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.show();

        mInventoryProductListAdapter.reset();
        if (getNetworkAvailability()) {
            getFeed();
        } else {
            getFeedFromDatabase();
        }
    }

    private void getFeed() {
        Call<List<InventoryProductModel>> listCall = mRetrofitClient.getWarehouseServiceInventoryProduct().getAllInventoryProducts();
        listCall.enqueue(new Callback<List<InventoryProductModel>>() {
            @Override
            public void onResponse(Call<List<InventoryProductModel>> call, Response<List<InventoryProductModel>> response) {
                if (response.isSuccessful()) {
                    List<InventoryProductModel> inventoryProductModelList = response.body();

                    for (int i = 0; i < inventoryProductModelList.size(); i++) {
                        InventoryProductModel inventoryProductModel = inventoryProductModelList.get(i);
                        mInventoryProductListAdapter.notifyDataSetChanged();
                    }
                } else {
                    int sc = response.code();
                    switch (sc) {
                    }
                }
                mProgressDialog.dismiss();
            }

            @Override
            public void onFailure(Call<List<InventoryProductModel>> call, Throwable t) {
                mProgressDialog.dismiss();
                Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void getFeedFromDatabase() {
        List<InventoryProductModel> inventoryProductModelList = mDatabase.getInventoryProducts();
        for (int i = 0; i < inventoryProductModelList.size(); i++) {
            InventoryProductModel inventoryProductModel = inventoryProductModelList.get(i);
            Log.d(TAG, inventoryProductModel.getName() + "||" + inventoryProductModel.getCountryId());
        }
        mProgressDialog.dismiss();
    }

    private boolean getNetworkAvailability() {
        return Utils.isNetworkAvailable(getApplicationContext());
    }

    @Override
    public void onClick(int position) {

    }
}

E / WindowManager: android.view.WindowLeaked: Activity codes.bala.bmsfinal1.activity.MainActivity утекло окно DecorView @ 52c3fcd [], которое было первоначально добавлено здесь на Android.view.ViewRootImpl. (ViewRootImpl.java:418) в android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:331) в android.view.WindowManagerImpl.addView (WindowManagerImpl.java:93) в android.show.Dialog.java:322) в android.app.ProgressDialog.show (ProgressDialog.java:116) в android.app.ProgressDialog.show (ProgressDialog.java:104) в codes.bala.bmsfinal1.activity.MainActivity.login (MainActivity.java: 61) at codes.bala.bmsfinal1.activity.MainActivity $ 1.onClick (MainActivity.java:41) на android.view.View.performClick (View.java:5637) на android.view.View $ PerformClick.run(View.java:22429) на android.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6119) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) I / ViewConfigCompat: не удалось найти метод getScaledScrollFactor () в ViewConfiguration D / AndroidRuntime: завершение работы VM

--------- началоаварийное завершение E / AndroidRuntime: ФАКТИЧЕСКОЕ ИСКЛЮЧЕНИЕ: основной Процесс: codes.bala.bmsfinal1, PID: 12077 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {codes.bala.bmsfinal1 / codes.bala.bmsfinal1.activity.InventoryProductActivity}: java.lang.NullPointerException: попытка вызвать метод интерфейса retrofit2.Call codes.bala.bmsfinal1.iinterface.WarehouseService.getAllInventoryProducts () 'для ссылки на пустой объект в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2665).app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActtivationThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1477) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6119) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886)) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

Причина: java.lang.NullPointerException: Попытка вызвать метод интерфейса retrofit2.Call codes.bala.bmsfinal1.iinterface.WarehouseService.getAllInventoryProducts () 'для ссылки на нулевой объект в codes.bala.bmsfinal1.activity.InventoryProductActivity.getFeed (InventoryProductActivity.java:88) в codes.bala.bmsfinal1.activity.InventoryProductActivity.loadInventoryAventProduventFvent)в codes.bala.bmsfinal1.activity.InventoryProductActivity.onCreate (InventoryProductActivity.java:46) в android.app.Activity.performCreate (Activity.java:6679) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118) вandroid.app.ActivityThread.performLaunchActivity (ActivityThread.java:2618) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $H.handleMessage (ActivityThread.java:1477) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java: 6119) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) Приложение закрыто.

1 Ответ

0 голосов
/ 26 сентября 2018
getWarehouseServiceInventoryProduct()

метод возврата null.Вам следует установить точку останова внутри этого метода и проверить, что происходит (или добавить несколько журналов для этого метода).

...