2014-10-09 3 views
0

하이는 AsyncTask를 통해 다른 활동 목록 요소를 보내려고하고 있어요하지만 난 당신이 나를 도와주세요 수있는 적절한 결과를 얻을 어차피 ..arynylist 요소를 리스너 인터페이스를 통해 asynctask에서 활동으로 보내는 방법은 무엇입니까?

이 내 asnctask입니다 :

공용 클래스 AsyncClass가 {

AsyncTask를 확장 이 링크는 당신을 도울 수
Context ct; 

ArrayList<GetterSetterClass> listshows; 
private String TAG = "AsynClass"; 
GetterSetterClass gettersettercls; 
MainActivity mainActivity; 

// Communication between asynclass and mainactivity 

public AsyncClass(MainActivity mainActivity) { 
    this.mainActivity = mainActivity; 
} 

public interface ListenerClass { 
    public void callbackMyActivity(); 

} 

// Get the Url response from this method 

public String queryRESTurl(String urlString) { 

    StringBuilder builder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost httpGet = new HttpPost(urlString); 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
      } 
     } else { 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    if (BuildConfig.DEBUG) 
     Log.i("QueryResult", builder.toString()); 
    return builder.toString(); 

} 

public JSONObject convertStringtoJsonObject(String result) { 
    JSONObject jArray = null; 

    try { 

     jArray = new JSONObject(result); 
    } catch (JSONException e) { 

    } 

    return jArray; 

} 

@Override 
protected String doInBackground(String... params) { 
    if (BuildConfig.DEBUG) 
     Log.i("EnterDoinbackground", "EnterDoinbackground"); 
    try { 
     if (BuildConfig.DEBUG) 
      Log.i("ShowsUrl", params[0]); 
     String results = queryRESTurl(params[0]); 

     if (results != null) { 

      JSONObject json = convertStringtoJsonObject(results); 
      try { 

       listshows = new ArrayList<GetterSetterClass>(); 
       JSONObject result = json 
         .getJSONObject(MainActivity.Rootnode); 

       Log.d("Get the string results", "" + result); 

       JSONArray jarray = result.getJSONArray(MainActivity.shows); 
       int jasonarrayLength = jarray.length(); 

       for (int i = 0; i < jasonarrayLength; i++) { 

        JSONObject jsonkey = jarray.getJSONObject(i); 

        gettersettercls = new GetterSetterClass(

        jsonkey.getString(MainActivity.DATE_CREATED), 
          jsonkey.getString(MainActivity.SHOW_NAME), 
          jsonkey.getString(MainActivity.PLAY_NAME), 
          jsonkey.getString(MainActivity.SHOW_COVER), 
          jsonkey.getInt(MainActivity.ASSET_COUNT), 
          jsonkey.getInt(MainActivity.SHOW_ID), 
          jsonkey.getString(MainActivity.LINK_MD5), 
          jsonkey.getString(MainActivity.DESCRIPTION)); 
        listshows.add(gettersettercls); 

        /* 
        * Log.i("list elements", "List elements displayed :\n" 
        * + listshows); 
        */ 
       } 
      } catch (Exception e) { 
       Log.d(TAG, "Exception thrown :" + e); 
      } 
     } else { 

     } 

    } catch (Exception e) { 
    } 

    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    Log.i("Listitems", "" + listshows.size()); 

    Message msg = Message.obtain(); 
    msg.obj = listshows; 
    Handler handler = new Handler(); 
    handler.sendMessage(msg); 

    if (!mainActivity.isFinishing()) { 

     mainActivity.callbackMyActivity(); 

    } 

} 

}

답변

0

가장 쉬운 방법은 콜백을 구현하는 것입니다. 당신 AsyncClass에서

public interface OnRESTCallFinishedListener { 
    public void onDataReady(ArrayList<GetterSetterClass> listshows); 
} 

: 당신의 활동에

private OnRESTCallFinishedListener listener; 

public void setOnRESTCallFinishedListener(OnRESTCallFinishedListener listener){ 
    this.listener = listener; 
} 

@Override 
protected void onPostExecute(ArrayList<GetterSetterClass> result) { 
    super.onPostExecute(result); 
    listener.onDataReady(result); 
} 

:

인터페이스를 만들기

public class MainActivity extends Activity implements OnRESTCallFinishedListener { 

및 onDataReady 오버라이드 (override) :

@override 
public void onDataReady(ArrayList<GetterSetterClass> listshows){ 
    //display your data. 
} 
,

활동에 AsyncTask 인스턴스를 만들 때 청취자를 설정해야합니다. 그렇지 않으면 작동하지 않습니다 :

AsyncClass dataLoader = new AsyncClass(); 
dataLoader.setOnRESTCallFinishedListener(this); 
관련 문제