2016-12-21 4 views
0

JSONからいくつかの項目をロードしようとしていますが、1つのアクティビティを使用しているときにJSONを取得して解析できます。ただし、LoadJSON.classを使用してJSONをロードすると、アクティビティはjsonを呼び出して、そのアクティビティのlistviewに表示できます。ここで別のクラスにJSON arraylistをロードして別のアクティビティを読み込み

は、私が試したものです:

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; 
} 

Activityクラス

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クラスのリストビューには表示されません。誰も助けて、私が間違っていることを示すことができますか?ありがとう

+0

をあなたが必要とするすべてはとても活動へのごsongMangerからの通信である[これを適用します] (https://developer.android.com/training/basics/fragments/communicating.html)。フラグメントを 'SongManager'とみなし、リストが作成されたときにSongManagerからリストにアクティビティを送ります –

答えて

1

これを解決するには、Parcelableを実装して受信アクティビティにリストを送信しました。

活動Aからリストの送信
public class SolTracks implements Parcelable { 
    public String title; 
    public String id; 
    public String stream_url; 
} 

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"); 
} 
関連する問題