在单独的类中加载JSON arraylist并加载另一个活动

时间:2016-12-21 16:47:20

标签: java android json listview

我正在尝试从JSON加载一些项目,我能够获取并解析JSON并在使用一个活动时将其加载到listview中。但是,我想使用LoadJSON.class来加载JSON,然后活动可以调用传递的json并在该活动的listview中显示它。

以下是我的尝试:

SongsManager.class

public class SongsManager {

private String TAG = SongsManager.class.getSimpleName();
private static final String API_URL = "http://xxxxxxxxxxxxx.com/jame/mp3/songlist.json";
private List<SolTracks> solTracksList;
private ProgressDialog pDialog;
private final Activity activity;

public SongsManager(Activity activity) {
    this.activity = activity;

    solTracksList = new ArrayList<>();
    pDialog = new ProgressDialog(activity);

    fetchSongs();
}

private void fetchSongs() {
    pDialog.setMessage("Fetching Playlist...");
    pDialog.show();

    // Volley's json array request object
    JsonArrayRequest req = new JsonArrayRequest(API_URL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, "Responser = " + response.toString());
                    pDialog.hide();

                    if (response.length() > 0) {
                        // looping through json and adding to movies list
                        for (int i = 0; i < response.length(); i++) {
                            try {
                                JSONObject movieObj = response.getJSONObject(i);

                                String songTitle = movieObj.getString("title");
                                String songId = movieObj.getString("id");
                                String streamUrl = movieObj.getString("stream_url");

                                SolTracks m = new SolTracks(songTitle, songId, streamUrl);

                                solTracksList.add(m);
                                Collections.sort(solTracksList, new TrackComparator());


                            } catch (JSONException e) {
                                Log.e(TAG, "JSON Parsing error: " + e.getMessage());
                            }
                        }
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Server Error: " + error.getMessage());
            pDialog.hide();
            Snackbar snackbar = Snackbar
                    .make(activity.findViewById(android.R.id.content), "PLEASE CHECK YOUR INTERNET", Snackbar.LENGTH_LONG)
                    .setAction("DISMISS", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                        }
                    });
            // Changing snackbar background
            snackbar.getView().setBackgroundColor(ContextCompat.getColor(activity, R.color.colorPrimary));

            // Changing message text color
            snackbar.setActionTextColor(Color.YELLOW);

            // Changing action button text color
            View sbView = snackbar.getView();
            TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
            textView.setTextColor(Color.WHITE);

            snackbar.show();

        }
    });

    req.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(req);

}


public List<SolTracks> getList() {
    return solTracksList;
}

活动类

public class TheMain1 extends AppCompatActivity {

private SwipeRefreshLayout swipeRefreshLayout;
private String TAG = TheMain1.class.getSimpleName();
private static final String API_URL = "http://xxxxxxxxxxx.com/jame/mp3/songlist.json";
private ListView listView;
private SolTracksAdapter adapter;
private ProgressDialog pDialog;
private List<SolTracks> songslist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_the_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    listView = (ListView) findViewById(R.id.track_list_view);

    songslist = new ArrayList<>();
    SongsManager songsManager = new SongsManager(this);
    songslist = songsManager.getList();
    adapter = new SolTracksAdapter(this, songslist);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener()

                                    {
                                        @Override
                                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                            SolTracks track = songslist.get(position);

                                            final String stream_url = track.stream_url;
                                            final String id_url = track.id;

                                            Intent intent = new Intent(TheMain1.this, PlayerActivity.class);
                                            intent.putExtra("songPosition", position);
                                            intent.putExtra("streamUrl", stream_url);
                                            startActivity(intent);

                                        }
                                    }

    );
}

就像现在一样,我知道JSON是从SongsManager加载的,但它只是没有显示在Activity类的列表视图中。任何人都可以帮忙,并表明我做错了什么?感谢

1 个答案:

答案 0 :(得分:1)

我能够通过实施Parcelable将列表发送到接收活动来解决这个问题。

public class SolTracks implements Parcelable {
    public String title;
    public String id;
    public String stream_url;
}

从活动A发送列表:

Intent intent = new Intent(TheMain.this, PlayerActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mylist", solTracksList);
intent.putExtras(bundle);
intent.putExtra("songPosition", position);
startActivity(intent);

然后在活动B中接收:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    songPosition = extras.getInt("songPosition");
    trackList = extras.getParcelableArrayList("mylist");
}