首次在Android Studio上运行时,不会显示JSON数据

时间:2016-08-06 17:50:27

标签: java android json android-volley

我学习Android并创建简单的联系人应用程序。

当我使用自定义适配器时,首次在Android Studio上运行时,我的数据不会显示。 但它出现在Android Monitor的日志中,并在Android Emulator上第二次运行时出现。 我使用 Volley 来使用Http Client并使用 Jackson 渲染JSON数据。

这是我的主要活动

package fanjavaid.com.contactapp;

...
...

public class MainActivity extends AppCompatActivity {

    private ListView contactListView;
    private Context context;
    private ContactAdapter adapter;
    static List<Contact> contacts = new ArrayList<>();
    private ObjectMapper objectMapper;

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

        // Call API
        callContactsAPI();

        adapter = new ContactAdapter(this, contacts);
        contactListView = (ListView) findViewById(R.id.contactList);
        contactListView.setAdapter(adapter);
    }

    private void callContactsAPI() {
        String url = "http://192.168.10.10/contacts";

        JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {

                    if (objectMapper == null) {
                        objectMapper = new ObjectMapper();
                    }

                    // Jackson
                    contacts = Arrays.asList(objectMapper.readValue(response.toString(), Contact[].class));
                    Log.i("Jackson Results : ", objectMapper.writeValueAsString(contacts));

                    // Important think!
                    adapter.notifyDataSetChanged();
                } catch (JsonMappingException e) {
                    e.printStackTrace();
                } catch (JsonParseException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        Volley.newRequestQueue(this).add(request);
    }
}

谢谢..

0 个答案:

没有答案