いくつかのエントリのリストを作成しようとしていますが、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 に渡すことに注意してください。多分私は何か他のものを渡す必要がありますか?
ありがとうございました。