Android 中的空白 ListView

Blank ListView in Android

我正在解析 json 应用程序,但我遇到了问题!

我有这些代码:

Temps.java :

package model;

public class Temps {
private String direction;
private String ligne;
private String temps;

public Temps() {
}

public Temps(String direction, String ligne, String temps) {

    this.direction = direction;

    this.ligne = ligne;

    this.temps = temps;
}


public String getDirection() {
    return direction;
}

public void setDirection(String thumbnailUrl) {
    this.direction = thumbnailUrl;
}


public String getTemps() {
    return temps;
}

public void setTemps(String temps) {
    this.temps = temps;
}

public String getLigne() {
    return ligne;
}

public void setLigne(String ligne) {
    this.ligne = ligne;
}

}

TempsActivity.java :

package activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.example.pierre.tan.R;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import adapter.CustomListAdapterTemps;
import app.AppController;
import model.Temps;


 public class TempsActivity extends ActionBarActivity {

private Toolbar mToolbar;
private static final String TAG = MainActivity.class.getSimpleName();

// Movies json url

private List<Temps> directionList = new ArrayList<Temps>();
private ListView listView2;
private CustomListAdapterTemps adapter;
private SwipeRefreshLayout swipeLayout;
private Menu menu;
private MenuInflater inflater;
HashMap<String, String> lieumap = new HashMap<String, String>();


public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_temps, container, false);


    // Inflate the layout for this fragment
    return rootView;


}

public void onActivityCreated(Bundle savedInstanceState) {

    Intent intent = getIntent();

    final String url = "https://open.tan.fr/ewp/tempsattente.json/" + intent.getExtras().getString("text") + " ";
    System.out.println(intent.getExtras().getString("text") + " Test Test ");


    listView2 = (ListView) findViewById(R.id.list_temps);

    // movieList is an empty array at this point.
    adapter = new CustomListAdapterTemps(getParent(), directionList);
    listView2.setAdapter(adapter);
    // Showing progress dialog before making http request


    swipeLayout = (SwipeRefreshLayout) findViewById(R.id.container);
    swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Toast.makeText(getApplication(), "Rechargement...", Toast.LENGTH_SHORT).show();


            JsonArrayRequest movieReq = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());


                            // Parsing json
                            for (int i = 0; i < response.length(); i++) {
                                try {

                                    JSONObject obj = null;
                                    try {
                                        obj = response.getJSONObject(i);
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }

                                    Temps temps = new Temps();

                                    temps.setDirection(obj.getString("terminus"));

                                    temps.setLigne(obj.getString("sens"));


                                    temps.setTemps(obj.getString("temps"));


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

                            }

                            // notifying list adapter about data changes
                            // so that it renders the list view with updated data
                            adapter.notifyDataSetChanged();
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());

                    Toast.makeText(getApplicationContext(), "No internet connection !", Toast.LENGTH_LONG).show();


                }


            });


            AppController.getInstance().addToRequestQueue(movieReq);

            swipeLayout.setRefreshing(false);


        }
    });
    swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
            android.R.color.holo_green_light,
            android.R.color.holo_orange_light,
            android.R.color.holo_red_light);


   }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
     }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    if (id == R.id.action_search) {
        String title = getString(R.string.app_name);
        Fragment fragment = null;
        fragment = new ArretsFragment();
        title = "Rechercher";

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container_body, fragment);
        fragmentTransaction.commit();
        getSupportActionBar().setTitle(title);
        return true;
    }

    return super.onOptionsItemSelected(item);
}


@Override
public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);


    setContentView(R.layout.activity_temps);
    mToolbar = (Toolbar) findViewById(R.id.toolbar);


    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);


    Intent intent = getIntent();

    final String url = "https://open.tan.fr/ewp/tempsattente.json/" + intent.getExtras().getString("text") + " ";


    listView2 = (ListView) findViewById(R.id.list_temps);

    // movieList is an empty array at this point.
    adapter = new CustomListAdapterTemps(this, directionList);
    listView2.setAdapter(adapter);

    JsonArrayRequest movieReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());


                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = null;
                            try {
                                obj = response.getJSONObject(i);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                            Temps temps = new Temps();
                            temps.setDirection(obj.getString("terminus"));
                            temps.setLigne(obj.getString("sens"));
                            temps.setTemps(obj.getString("temps"));


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

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());

            Toast.makeText(getApplicationContext(), "No internet connection !", Toast.LENGTH_LONG).show();


        }


    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(movieReq);


}


}

和 CustomListViewAdapterTemps.java :

package adapter;


import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.example.pierre.tan.R;

import java.util.List;

import app.AppController;
import model.Temps;


public class CustomListAdapterTemps extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Temps> directionItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();


public CustomListAdapterTemps(Activity activity, List<Temps> directionItems) {
    this.activity = activity;
    this.directionItems = directionItems;
}

@Override
public int getCount() {
    return directionItems.size();
}

@Override
public Object getItem(int location) {
    return directionItems.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {


    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_rowtemps, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();

    TextView direction = (TextView) convertView.findViewById(R.id.direction);
    TextView ligne = (TextView) convertView.findViewById(R.id.ligne);
    TextView temps = (TextView) convertView.findViewById(R.id.temps);


    // getting movie data for the row
    Temps m = directionItems.get(position);


    // title
    direction.setText(m.getDirection());


    ligne.setText(m.getLigne());

    temps.setText(m.getTemps());

    return convertView;


}


}

我不明白为什么我会得到一个空白的 ListView,因为 url json 可以正常工作,并且在控制台中我们只能看到带有数据的 json 请求。如果有人能帮助我,那就太好了!

您好,我认为您没有将您的回复添加到列表中,请试试这个:

   Temps temps = new Temps();
   temps.setDirection(obj.getString("terminus"));
   temps.setLigne(obj.getString("sens"));
   temps.setTemps(obj.getString("temps"));

   directionList.add(temps);

那是因为您的 directionList 是空的。在您解析 JSON 的循环中,您正在创建 Temps 对象:

Temps temps = new Temps();
temps.setDirection(obj.getString("terminus"));
temps.setLigne(obj.getString("sens"));
temps.setTemps(obj.getString("temps"));

但您没有将它们添加到您的 directionsList。在上面的后面添加这一行:

directionList.add(temps);