2016-07-23 65 views
0

我已經設置okhttp從我的服務器下載數據並以正常文本視圖顯示它。 但我很想把它給ListView。OkHTTP AndroidBaseAdapter到數據列表視圖

我知道我需要有底座適配器,有些項目佈局,我需要關於如何使它與OKHTTP協同工作的幫助。

這是我用來下載它的代碼,如果你需要其他東西,請評論。

public class TaskAktualnosci extends AsyncTask<String, Void, String> { 

    protected String doInBackground(String... params) { 
     try { 
      //*OKHTTP ponoć parametry dodaje do buildera* 
     //  RequestBody parametry = new FormBody.Builder() 
     //   .add("offset", "0") 
     //   .add("limit", "50") 
      //   .build(); 

      OkHttpClient klient = new OkHttpClient(); 
      final Gson gson = new Gson(); 


      Request request = new Request.Builder() 
        .url("http://www.apirest.poligon.webimpuls.pl/v1/restapi/aktualnosci?offset=0?limit=50") 
        // .post(parametry) 
        .build(); 



      Response response = klient.newCall(request).execute(); 
      return response.body().string(); 



     }catch (Exception e){ 



      return null; 
     } 



    } 


    @Override 
    protected void onPostExecute(String s){ 
     super.onPostExecute(s); 

     TextView textView = (TextView) findViewById(R.id.ciastko); 
     textView.setText(s); 
    } 


} 

} 

我有點新來android整體和使用Android Studio。

任何人都可以以正常方式向我解釋或顯示代碼片段?

+0

你並不需要一個的AsyncTask使用OkHttp –

+0

我不?那麼我如何使它工作?當我嘗試別的時候,我遇到了網絡錯誤。 – Aksebkit

+0

請參閱「異步獲取」 - https://github.com/square/okhttp/wiki/Recipes –

回答

0

您需要製作自己的適配器。我更喜歡從BaseAdapter擴展和創建自己的列表項類:

class ListItem { 
    private long mId; 
    private String mContent; 

    public ListItem(final long mId, final String mContent) { 
     this.mId = mId; 
     this.mContent = mContent; 
    } 

    public long getId() { 
     return mId; 
    } 

    public String getContent() { 
     return mContent; 
    } 

} 

public class adapter_akt extends BaseAdapter { 
    private List<ListItem> mData = new ArrayList<>(); 

    public void setData(List<ListItem> data){ 
     mData = data; 
     notifyDataSetChanged(); 
    } 

    public ListItem getItem(int position){ 
     return mData.get(position); 
    } 

    @Override 
    public long getItemId(final int position) { 
     return getItem(position).getId(); 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     if (convertView == null){ 
      convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent); 
      ViewHolder h = new ViewHolder(); 
      h.textView1 = (TextView) convertView.findViewById(android.R.id.text1); 
      convertView.setTag(h); 
     } 

     ViewHolder holder = (ViewHolder)convertView.getTag(); 
     ListItem item = getItem(position); 
     holder.textView1.setText(item.getContent()); 

     return convertView; 
    } 

    public int getCount(){ 
     return mData.size(); 
    } 

    private class ViewHolder{ 
     TextView textView1; 
    } 
} 

然後所有的u需要的是什麼,以你的適配器設置爲您的ListView。

你的AsyncTask會是什麼樣子:

public class Test1 extends AsyncTask<String, Void, String> { 

protected String doInBackground(String... params) { 
    try { 
     //*OKHTTP ponoć parametry dodaje do buildera* 
    //  RequestBody parametry = new FormBody.Builder() 
    //   .add("offset", "0") 
    //   .add("limit", "50") 
     //   .build(); 

     OkHttpClient klient = new OkHttpClient(); 
     final Gson gson = new Gson(); 


     Request request = new Request.Builder() 
       .url("http://www.apirest.poligon.webimpuls.pl/v1/restapi/aktualnosci?offset=0?limit=50") 
       // .post(parametry) 
       .build(); 



     Response response = klient.newCall(request).execute(); 
     return response.body().string(); 



    }catch (Exception e){ 



     return null; 
    } 



} 


@Override 
protected void onPostExecute(String s){ 
    super.onPostExecute(s); 

    List<ListItem> contentList = new ArrayList<>(); 
    /* 
    her u need to read data from s to the list; 
    */ 

    MyListAdapter adapter = find();//here u need to get your Adapter, maybe its member of your fragment class 
    adapter.setData(contentList); 
} 


} 
+0

我需要爲ListItem製作佈局嗎? – Aksebkit

+0

你可以使用android.layout.simple_list_item_1,我會更新答案 – canisLupusLupus

+0

是的,我仍然有trobule如何做到這一點,我無法理解這一切。我找不到一些一步一步的指南或任何東西。我所嘗試的一切都給了我錯誤。 – Aksebkit