2017-11-26 2 views
1

AsyncTask 클래스에서 3 개의리스트를 다른 클래스로 보내려고합니다. AsyncTask 클래스는 json과 3 개의 다른 데이터를 취하고 3 개의 문자열 목록을 삽입합니다. 리사이클러 어댑터를 삽입하려면이 목록을 다른 클래스에 보내야합니다.asynctask 클래스에서 다른 클래스로 3리스트 보내기

public class FetchNewsData extends AsyncTask<String, String, JSONObject> { 

static List<String> title = new ArrayList<>(); 
static List<String> body = new ArrayList<>(); 
static List<String> imageUrl = new ArrayList<>(); 

public List<String> getTitle() { 
    return title; 
} 

public List<String> getBody() { 
    return body; 
} 

public List<String> getImageUrl() { 
    return imageUrl; 
} 

private static String url = "https://content.guardianapis.com/search?format=json&show-fields=thumbnail,trailText&api-key=f627bebe-3c4f-4fee-a2fc-3368a3b098c7"; 
private static final String TAG_RESPONSE = "response"; 
private static final String TAG_RESULTS = "results"; 
private static final String TAG_TITLE = "webTitle"; 
private static final String TAG_DATE = "webPublicationDate"; 
private static final String TAG_SECTION_NAME = "sectionName"; 
private static final String TAG_FIELDS = "fields"; 
private static final String TAG_TEXT = "trailText"; 
private static final String TAG_IMG_URL = "thumbnail"; 


@Override 
protected JSONObject doInBackground(String... args) { 
    JSONParser jParser = new JSONParser(); 

    // Getting JSON from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 
    return json; 
} 

@Override 
protected void onPostExecute(JSONObject json) { 

    try { 
     // Getting JSON Array 
     JSONObject response = json.getJSONObject(TAG_RESPONSE); 

     JSONArray result = response.getJSONArray(TAG_RESULTS); 

     for (int i = 0; i < result.length(); i++) { 

      JSONObject resultsObjects = result.getJSONObject(i); 

      JSONObject fields = resultsObjects.getJSONObject(TAG_FIELDS); 


      // Storing JSON item in a Variable 
      if (resultsObjects.has(TAG_TITLE)) { 
       String header = resultsObjects.getString(TAG_TITLE); 
       title.add(header); 
      } else title.add(null); 

      if (fields.has(TAG_TEXT)) { 
       String text = fields.getString(TAG_TEXT); 
       body.add(text); 
      } else body.add(null); 

      if (fields.has(TAG_IMG_URL)) { 
       String imgUrl = fields.getString(TAG_IMG_URL); 
       imageUrl.add(imgUrl); 
      } else imageUrl.add(null); 

     } 

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


} 
} 

다음 코드에서 RecyclerAdapter은 매개 변수로 3 목록을 가져야합니다. 어떻게해야합니까? 누군가 나를 기쁘게 도와 줄 수 있습니까?

private void setupRecyclerView(RecyclerView recyclerView) { 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    List<String> itemList; 
    itemList = createItemList(); 

    List<String> titleList=new ArrayList<>(itemData.getTitle()); 

    String[] itemlistToArray = new String[itemList.size()]; 
    itemlistToArray = itemList.toArray(itemlistToArray); 

    String[] asd= {"a","b","c"}; 

    String[] titlelistToArray = new String[titleList.size()]; 
    titlelistToArray = titleList.toArray(titlelistToArray); 

    recyclerAdapter = new RecyclerAdapter(asd, itemlistToArray, itemlistToArray); 
    recyclerView.setAdapter(recyclerAdapter); 
} 
+0

[recyclerview] (http://www.androidtutorialshub.com/android-recyclerview-tutorial/) 자습서를 완전히 읽고 나면 더 쉽게 될 것입니다. – Erik

+0

고맙습니다. 그것은 매우 유용한 소스입니다. 탭이있는 recyclerview를 사용하려고합니다. setupRecyclerView 메소드가 내 프래그먼트 클래스에 있습니다. 또한 json에서 데이터를 가져와 데이터를 어댑터로 리디렉션해야합니다. setupRecyclerView를 FetchNewsData 클래스로 옮겼습니다. 그리고 textview의 디스플레이 텍스트를 성공 시켰습니다. –

답변

0

왜 당신은 onPostExecute 메서드에서 직접 setupRecyclerView 메서드를 호출할까요 ??

이러한 목록을 사용자 지정 클래스 내에 저장하고 해당 클래스 개체를 의도를 통해 다른 작업으로 전달해야하는 경우가 있습니다.

1) 맞춤 클래스 인 MyLists를 만들고이 클래스 내에서이 목록을 설정하십시오.

2) Serializable을 사용하여이 클래스를 구현하십시오.

3) Mylists 클래스 개체를 의도를 통해 다른 활동으로 전달합니다.

+0

고맙습니다. 내 setupRecyclerView 메서드를 FetchNewsData 클래스로 옮겼습니다. 그리고 textview의 디스플레이 텍스트를 성공 시켰습니다. –

+0

행복한 코딩 :) – MezzyDroid

관련 문제