Observable给出了onComplete()中List null的大小

时间:2017-01-12 16:23:21

标签: android json realm rx-java

我需要在Realm中保存一个我已保存在Assets文件夹中的JSON。

所以我决定这样做:

  private void putCountryIntoRealm()
{
    Observable.create(new Observable.OnSubscribe<String>()
    {

        public void call(Subscriber<? super String> subscriber)
        {
            try
            {
                InputStream is = getActivity().getAssets().open("countries.json");
                Reader inRead = new InputStreamReader(is);
                Gson gson = new Gson();

                JsonReader reader = new JsonReader(inRead);
                reader.setLenient(true);


                reader.beginArray();


                while (reader.hasNext())
                {

                    CountryObject ct = gson.fromJson(reader, CountryObject.class);
                    country.add(ct);
                    System.out.println("size ct: "+country.size());
                    subscriber.onNext(reader.toString());

                }

                reader.endArray();
                reader.close();


                subscriber.onCompleted();

            }
            catch (IOException e)
            {
             subscriber.onError(e);
            }



        }
    }).subscribeOn(Schedulers.newThread())
      .subscribe(new Subscriber<String>()
      {
          @Override
          public void onCompleted()
          {
              getActivity().runOnUiThread(new Runnable()
              {
                  @Override
                  public void run()
                  {

                      realm.executeTransactionAsync(new Realm.Transaction()
                      {
                          float total = 0;
                          float size = country.size();

                          String progressCount;

                          public void execute(Realm mRealm)
                          {
                              Countries countries = new Countries();
                              int i;

                              System.out.print("countries size: "+size);

                              for (i = 0; i < country.size(); i++)
                              {

                                  total = (i/size * 100);
                                  progressCount = String.format("%.0f",total);


                                  countries.setId(country.get(i).getId());
                                  countries.setCode(country.get(i).getCode());
                                  countries.setName(country.get(i).getName());
                                  countries.setContinent(country.get(i).getContinent());
                                  countries.setKeywords(country.get(i).getKeywords());
                                  countries.setWikipedia_link(country.get(i).getWikiLink());

                                  mRealm.insertOrUpdate(countries);

                                  getActivity().runOnUiThread(new Runnable()
                                  {
                                      @Override
                                      public void run()
                                      {
                                          //Log.d("%",progressCount);

                                          dialog = new ProgressDialog(getActivity());
                                          dialog.setTitle("Salvataggio country in corso");
                                          dialog.setMessage(progressCount+"%");
                                      }
                                  });

                              }
                          }
                      },new Realm.Transaction.OnSuccess() {
                          @Override
                          public void onSuccess()
                          {


                              Log.wtf("va","Ok");

                              if(dialog.isShowing())
                                  dialog.dismiss();


                          }
                      }, new Realm.Transaction.OnError()
                      {
                          @Override
                          public void onError(Throwable error)
                          {
                              error.printStackTrace();

                          }
                      });
                  }
              });

          }


          @Override
          public void onError(Throwable e)
          {
           e.printStackTrace();
          }

          @Override
          public void onNext(String s)
          {
            System.out.println(s);

          }
      });
}

但我有这个错误:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'long com.plenitudesrls.aviocalc.helpful.CountryObject.getId()' on a null object reference

事实上,我打印日志,onNext()的尺寸为245,onCompleted()null

为什么我有这个错误?我有另一种情况,这种情况很好。

由于

编辑:它运作良好,问题是导致崩溃的MalformedJson

0 个答案:

没有答案