2017-07-15 22 views
0

私のアプリでは、JSONファイルをアセットフォルダに保存しました。今、私は、ローカルのJSONファイルを解析して、recyclerviewにいくつかの情報を表示しようとしています。私のJsonファイルはこのように見えます。RecyclerviewのassetsフォルダからJSONデータを解析する

 { 
    "contacts":[ 
     { 
     "_id": "57f762f1", 
     "dn": "CNdreas ", 
     "mobile": "123456", 
     "mail": "[email protected]", 
     "name": "Hallo", 
     "company": "xyz company", 
     "department": "software", 
     "title": "Junior Developer", 
     "__v": 0, 
     "updated_at": "2016-10-07T08:55:13.909Z" 
     }, 
     { 
     "_id": "57f7", 
     "dn": "CNernard", 
     "mobile": "1239855", 
     "mail": "[email protected]", 
     "name": "nameis", 
     "company": "xyz Company", 
     "department": "Inhouse", 
     "__v": 0, 
     "updated_at": "2016" 
     }, 
    ..................lots of object 

このファイルから、モバイル、メール、名前、会社、部門、およびタイトルを取得したいと考えています。一部のオブジェクトでは "title"は含まれていません。私の例ではそれが示されています。私はrecyclerviewとcardviewでこれらの情報を解析しようとしています。しかし、私のアプリがクラッシュするたびに。私はこのJSONからいくつかのデータを解析し、RecyclerViewでどのように表示できるのか分からない。ここで私のMainActivityは、私がここにNULLポインタ例外エラーを取得しています

public class MyColleaguesPage extends AppCompatActivity { 

private RecyclerView recyclerView; 
private RecyclerView.Adapter adapter; 
private List<MyColleageModel> colleagueObject; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mycolleagues_layout); 
    recyclerView=(RecyclerView)findViewById(R.id.colleagues_recycler); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(layoutManager); 

    colleagueObject = new ArrayList<>(); 
    try { 
     JSONObject obj = new JSONObject(loadJSONFromAsset()); 
     JSONArray m_jArry = obj.getJSONArray("contacts"); 
     ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> m_li; 

     for (int i = 0; i < m_jArry.length(); i++) { 
      JSONObject jo_inside = m_jArry.getJSONObject(i); 
      String val1 = jo_inside.getString("mobile"); 
      String val2 = jo_inside.getString("mail"); 
      String val3 = jo_inside.getString("name"); 
      String val4 = jo_inside.getString("company"); 
      String val5 = jo_inside.getString("department"); 
      String val6 = jo_inside.optString("title"); 

      //Add your values in your `ArrayList` as below: 
      m_li = new HashMap<String, String>(); 
      m_li.put("mobile", val1); 
      m_li.put("mail",val2); 
      m_li.put("name", val3); 
      m_li.put("company",val4); 
      m_li.put("department", val5); 
      m_li.put("title",val6); 

      formList.add(m_li); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    recyclerViewstart(); 
    loadJSONFromAsset(); 
    adapter = new MyColleaguesAdapter(colleagueObject,this); 
    recyclerView.setAdapter(adapter); 
} 
private String loadJSONFromAsset() { 
    String json = null; 
    try { 

     InputStream is = getAssets().open("colleagues.json"); 

     int size = is.available(); 

     byte[] buffer = new byte[size]; 

     is.read(buffer); 

     is.close(); 

     json = new String(buffer, "UTF-8"); 


    } catch (IOException ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
    return json; 


} 

} 

あるJSONデータのための私のモデルクラス

public class MyColleageModel { 
private String _id; 
private String dn; 
private String mobile; 
private String mail; 
private String name ; 
private String company ; 
private String department; 
private String title ; 
private int __v ; 
private String updated_at; 

public MyColleageModel() { 

} 

public MyColleageModel(String mobile, String mail, 
         String name, String company, 
         String department, String title) { 

    this.mobile = mobile; 
    this.mail = mail; 
    this.name = name; 
    this.company = company; 
    this.department = department; 
    this.title = title; 
    } 

public String get_id() { 
    return _id; 
} 

public String getDn() { 
    return dn; 
} 

public String getMobile() { 
    return mobile; 
} 

public String getMail() { 
    return mail; 
} 

public String getName() { 
    return name; 
} 

public String getCompany() { 
    return company; 
} 

public String getDepartment() { 
    return department; 
} 

public String getTitle() { 
    return title; 
} 

public int get__v() { 
    return __v; 
} 

public String getUpdated_at() { 
    return updated_at; 
} 
} 

であることは私のエラーログです。私は場合によってはタイトルが含まれていないことを知っています。しかし、どうすればエラーなしで私のすべてのデータをrecyclerviewに表示させることができますか?

07-15 10:51:05.927 2406-2406/? W/art: Before Android 4.1, method int 
    android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, 
    boolean) would have incorrectly overridden the package-private method in 
    android.widget.ListView 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err: 
    org.json.JSONException: No value for title 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
    org.json.JSONObject.get(JSONObject.java:389) 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
    org.json.JSONObject.getString(JSONObject.java:550) 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
    myColleagues.MyColleaguesPage.onCreate(MyColleaguesPage.java:55) 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
    android.app.Activity.performCreate(Activity.java:6662) 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 

android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
    07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.app.ActivityThread.-wrap12(ActivityThread.java) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.os.Handler.dispatchMessage(Handler.java:102) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.os.Looper.loop(Looper.java:154) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
android.app.ActivityThread.main(ActivityThread.java:6077) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 
java.lang.reflect.Method.invoke(Native Method) 
07-15 10:51:08.049 2406-2406/com.testgrid W/System.err:  at 

答えて

0

は、私はあなたがrecyclerview initを

recyclerViewstart(); //first 

を置き忘れと思うそしてあなたはrecyclerViewを見つけるためにこれを使用、recyclerViewstart()を呼び出す必要があり、この

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mycolleagues_layout); 

    colleagueObject = new ArrayList<>(); 
    try { 
     JSONObject obj = new JSONObject(loadJSONFromAsset()); 
     JSONArray m_jArry = obj.getJSONArray("contacts"); 
     ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> m_li; 

     ...... 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    recyclerViewstart(); 
    adapter = new MyColleaguesAdapter(colleagueObject,this); 
    recyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 
+0

のためのオプションの文字列のタイトルはい、私が変更したかどうかを確認を意味します。しかし今は空のページを持っています –

+0

setAdapterの後に 'adapter.notifyDataSetChanged();'を追加しようとしました – ZeroOne

+0

empyページを取得しています。何もスタックエラーがある場合は –

0

同様

adapter = new MyColleaguesAdapter(colleagueObject,this); 
recyclerView.setAdapter(adapter); 

、 a次にrecyclerView.setAdapter(adapter);

+0

私のコードを変更しました。しかし私はempyページを取得しています –

0

初期化されていないrecyclerViewにデータを設定します。すぐ

setContentView(R.layout.mycolleagues_layout)の後に、あなたのクラスの先頭にこの

recyclerView=(RecyclerView)findViewById(R.id.colleagues_recycler);

を移動 。

+0

私は自分のコードを変更しました。しかし、私はここに何も表示されていない空のページを取得しています –

0

.optString( "title");空のタイトル応答の場合.getString( "title");

String val6 = jo_inside.optString("title"); 

上記のように、これはそれがよりcheck this link

+0

私はそれを変更していただきありがとうございます。問題は私がempy画面をマテッティングすることです。私のページには何も表示されません。私のコードに誤りがありますか? –

関連する問題