2017-03-10 7 views
2

私はAndroidのアプリケーションにAfter Effectsアニメーションを挿入するためにlottieを使用しようとしています。私のjsonファイルをLottieAnimationViewに挿入すると、 "エラーnullオブジェクト参照"が発生しました(Android)

Bodybovinを使用してAfter Effectsファイルを.jsonにエクスポートし、これをプロジェクトに挿入します。

これは、ライブラリのバージョンです:

dependencies { 
    compile 'com.airbnb.android:lottie:1.5.3' 
} 

私はこのコードを使用:私のアプリケーションを実行して、私のアニメーションをページに行くとき

<com.airbnb.lottie.LottieAnimationView 
    android:id="@+id/animation_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:lottie_fileName="myAnimation.json" // This is my file 
    app:lottie_loop="true" 
    app:lottie_autoPlay="true"/> 

は、このエラーが発生しました:

Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object reference 

"Lottie"というライブラリに私はこれを見つけました:

private static void parseLayers(JSONObject json, LottieComposition composition) { 
    JSONArray jsonLayers = json.optJSONArray("layers"); 
    int length = jsonLayers.length(); 
    for (int i = 0; i < length; i++) { 
    Layer layer = Layer.Factory.newInstance(jsonLayers.optJSONObject(i), composition); 
    addLayer(composition.layers, composition.layerMap, layer); 
    } 
} 

ありがとうございました。

答えて

1

EDIT

あなたのエラーはここにあるべきparseLayers(JSONObject json, LottieComposition composition)


メソッドに送信する前に、あなたのJSONファイルをチェックしてください:オブジェクトjsonLayersがnullで

private static void parseLayers(JSONObject json, LottieComposition composition) { 
    JSONArray jsonLayers = json.optJSONArray("layers"); 
    int length = jsonLayers.length(); // ************** HERE ************** 
    for (int i = 0; i < length; i++) { 
    Layer layer = Layer.Factory.newInstance(jsonLayers.optJSONObject(i), composition); 
    addLayer(composition.layers, composition.layerMap, layer); 
    } 
} 

その瞬間。トライキャッチやエラーを管理する場合は、単純なを追加することができます。

private static void parseLayers(JSONObject json, LottieComposition composition) { 
    JSONArray jsonLayers = json.optJSONArray("layers"); 
    if(jsonLayers != null){ 
     int length = jsonLayers.length(); 
     for (int i = 0; i < length; i++) { 
      Layer layer = Layer.Factory.newInstance(jsonLayers.optJSONObject(i), composition); 
      addLayer(composition.layers, composition.layerMap, layer); 
     } 
    } else { 
     // manage the error 
    } 
} 

またはこのエラーは、アニメーションに関連していない

private static void parseLayers(JSONObject json, LottieComposition composition) { 
     JSONArray jsonLayers = json.optJSONArray("layers"); 
     try{ 
      int length = jsonLayers.length(); 
      for (int i = 0; i < length; i++) { 
       Layer layer = Layer.Factory.newInstance(jsonLayers.optJSONObject(i), composition); 
       addLayer(composition.layers, composition.layerMap, layer); 
      } 
     } catch(NullPointerException e) { 
      // manage the error 
     } 
    } 

Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object reference 

このエラーは、JSONArrayオブジェクトでlenght()メソッドを使用しようとしていることを意味します。このオブジェクトは01です。。

完全なエラーレポートをコピーし、エラーが発生した行を確認してください。

それは次のようになります:

JSONArray ja = getJson(); // getJson() return null for any reason 
int lenght = ja.lenght(); // the error occurs because 'ja' is null 
+0

あなたの助けをありがとう!私は私の質問を更新しました。 –

+0

私はこのライブラリにプルリクエストをしようとします。しかし、問題は私のファイル.jsonに関するものだと思うが、このライブラリがこのファイルのアニメーションのすべてのケースをカバーしているかどうかはわからない。 –

+0

はい、jsonファイルを確認してください。このコードがライブラリからのものである場合、メソッドに送信する前にjsonをチェックする必要があります。 – MarcGV

関連する問題