0

いくつかのエントリのリストを作成しようとしていますが、php サーバーでクエリが発生します。AsyncTaskという名前のクラスを呼び出すフラグメントを使用していますDescarregarLlistatEntrades。このクラスは、基本的に php 実行からの json データを解析し、リストにデータを入力したいのですが、DescarregarLlistatEntrades拡張ListActivityしていないため、メソッドを使用できませんsetListAdapter

コードは次のとおりです。

フラグメント:

public class MyFragmentB extends Fragment {
private ArrayList<HashMap<String, String>> llistatEntrades;
Context cont=getActivity(); //Recupero el contexte per poder pasar-lo.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View myFragmentView = inflater.inflate(R.layout.llistat_fotos, container, false);

    //hashmap per al llistat de les entrades que hi han al servidor
    llistatEntrades=new ArrayList<HashMap<String, String>>();

    //descarrego totes les imatges en segon plà i omplo el view
    new DescarregarLlistatEntrades(cont, myFragmentView, llistatEntrades).execute();

    //Recupero el el layout de la view per poder fer coses am ella a posteriori.
    ListView lv = (ListView)myFragmentView.findViewById(android.R.id.list);

    return myFragmentView;
}

ダウンロードLlistatEntrades:

public class DescarregarLlistatEntrades extends AsyncTask<String, String, String>{
private Context mContext;
private View rootView;
private ArrayList<HashMap<String, String>> llistatEntrades;
private String linkFoto, dataUpload, usuariUpload, comentariUpload;
private ProgressDialog pDialog;
private List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONParser jsonParser = new JSONParser();

private String url_get_entrades = "http://192.168.1.33/testing/recuperaentrades.php"; //passantli per get el id de la setmana 

public DescarregarLlistatEntrades(Context context, View rootView, ArrayList<HashMap<String, String>> llistatEntrades){
    this.mContext=context;
    this.rootView=rootView;
    this.llistatEntrades=llistatEntrades;
}

@Override
protected void onPreExecute() {
    [...]
}

@Override
protected String doInBackground(String... arg0) { 
    params.add(new BasicNameValuePair("setmana", "1"));
    JSONObject json = jsonParser.makeHttpRequest(url_get_entrades, "GET", params);
    JSONArray entradesObj;
    try {
        int success = json.getInt("success");
        //mirem si hi ha success
        if (success==1){
            entradesObj = json.getJSONArray("entrades"); //recupero totes les entrades
            for (int i=0; i<entradesObj.length();i++){
                JSONObject entrada = entradesObj.getJSONObject(i); //recupero cada objecte
                //guardo cada camp de cada entrada a variables:
                this.usuariUpload=entrada.getString("usuariUploader");
                this.linkFoto=entrada.getString("urlFoto");
                this.comentariUpload=entrada.getString("comentariUsuari");
                this.dataUpload=entrada.getString("dataUpload");
                //creo el hashmap dels valors anteriors
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("usuariUpload", this.usuariUpload);
                map.put("linkFoto", this.linkFoto);
                map.put("comentariUpload", this.comentariUpload);
                map.put("dataUpload", this.dataUpload);
                this.llistatEntrades.add(map);
            }
        } else {
            Log.d("debugging","No hi han entrades..");
        }

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

    return null;
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    this.pDialog.dismiss(); //amago el dialog
    // updating UI
    /**
     * Updating parsed JSON data into ListView
     * */
    ListAdapter adapter = new SimpleAdapter(
            this.mContext, this.llistatEntrades,
            R.layout.entrada_llista, new String[] { "usuariUpload",
                    "linkFoto","comentariUpload", "dataUpload"},
            new int[] { R.id.userNameUploader, R.id.titolFoto, R.id.comment, R.id.hora });
    // updating listview
    setListAdapter(adapter); //THIS LINE!!

}

「メソッド setListAdapter(ListAdapter) はタイプ DescarregarLlistatEntrades に対して定義されていません」

フラグメントを使用する場合、別の方法を使用する必要がありますか?

AsyncTask クラス、Context、および Inflater に渡すことに注意してください。多分私は何か他のものを渡す必要がありますか?

ありがとうございました。

4

2 に答える 2

3

のインスタンスListViewを asynctask に渡す必要があるため、リスト アダプタを のこのインスタンスに設定するときListView。通常を使用する場合Fragment-レイアウトに追加ListViewし、メソッドで取得して、onCreateView非同期タスクに渡すことができます。また、フラグメントで使用してListFragment取得できるこの方法を使用することもできます。または、フラグメント レイアウトのルートである場合は、リスト ビューを取得します。何かのようなもの:ListViewgetViewMethodrootView

((ListView) rootView.findViewById(R.id.list_view)).setAdapter(adapter);
于 2013-01-05T14:14:33.893 に答える
0

最終的なコード: これは AsyncTask クラスです:

public DescarregarLlistatEntrades(Context context, View rootView, ArrayList<HashMap<String, String>> llistatEntrades, ListView lv){
    this.mContext=context;
    this.rootView=rootView;
    this.llistatEntrades=llistatEntrades;
    this.lv=lv;
}

そしてフラグメント

public class MyFragmentB extends Fragment {
private ArrayList<HashMap<String, String>> llistatEntrades;
Context cont;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    this.cont=getActivity(); //Recupero el contexte per poder pasar-lo.
    View myFragmentView = inflater.inflate(R.layout.llistat_fotos, container, false);

    //hashmap per al llistat de les entrades que hi han al servidor
    llistatEntrades=new ArrayList<HashMap<String, String>>();
    //Recupero el el layout de la view per poder fer coses am ella a posteriori.
    ListView lv = (ListView)myFragmentView.findViewById(android.R.id.list);

    //descarrego totes les imatges en segon plà i omplo el view
    new DescarregarLlistatEntrades(cont, myFragmentView, llistatEntrades, lv).execute();

    return myFragmentView;
}

魅力のように働く!!

于 2013-01-05T14:50:08.147 に答える