studio - onpreexecute method in android
Tarea Async de Android JSON Parsing onItemClickListener no funciona (0)
Estoy creando un fragmento dentro de una Actividad en el que estoy tratando de analizar una cadena JSON obtenida de Internet usando AsyncTask y mostrar los datos analizados de JSON en una vista de lista. Los elementos se muestran en la lista correctamente. Pero cuando hago clic en el elemento de la lista, el oyente no se activa. Que me estoy perdiendo aqui.
Mi archivo de actividad se muestra a continuación:
@SuppressWarnings("DefaultFileTemplate")
public class LaundryFragment extends BaseFragment {
private final String TAG = LaundryFragment.class.getSimpleName();
private ProgressDialog pDialog;
private ArrayList<HashMap<String, String>> laundryList;
private ListView lv ;
@Override
public void onStart() {
super.onStart();
sendView(LaundryTestActivity.class.getSimpleName(), null); //sending to Google Analytics
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.laundry_alerts, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
laundryList = new ArrayList<>();
new GetLaundry().execute();
lv = (ListView) getActivity().findViewById(R.id.laundry_list); //working
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("laundry",view.toString());
Toast.makeText(getActivity(),"clicked",Toast.LENGTH_LONG).show();
Log.d("laundry","log message");
}
});
}
/**
* Async task class to get json by making HTTP call
*/
private class GetLaundry extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>> > {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Please wait...");
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String url = "https://www.laundryalert.com/cgi-bin/backoffice/MachineState.py?loc=redwolves&room=All&format=JSON";
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONObject location = jsonObj.getJSONObject("location");
//Array of rooms like STEM Den, Honors 3,...
JSONArray rooms = location.getJSONArray("rooms");
// looping through All rooms
for (int i = 0; i < rooms.length(); i++) {
JSONObject r = rooms.getJSONObject(i);
String roomName = r.getString("name");
int washerCount = 0;
int availableWasherCount = 0;
int dryerCount = 0;
int availableDryerCount = 0;
JSONObject c = rooms.getJSONObject(i);
JSONArray machines = c.getJSONArray("machines");
HashMap<String, String> laun = new HashMap<>();
for (int j = 0; j < machines.length() ; j++ ){
JSONObject machine = machines.getJSONObject(j);
if(machine.getString("description").contains("Washer")) {
washerCount++;
if(machine.getString("status").contains("Available")){
availableWasherCount++;
}
}
else {
dryerCount++;
if(machine.getString("status").contains("Available")){
availableDryerCount++;
}
}
}
laun.put("name",roomName);
laun.put("AvailWasher",Integer.toString(availableWasherCount));
laun.put("AvailDryer",Integer.toString(availableDryerCount));
laun.put("TotalWasher",Integer.toString(washerCount));
laun.put("TotalDryer", Integer.toString(dryerCount));
laundryList.add(laun);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity().getApplicationContext(),
"Json parsing error: " + e.getMessage(),Toast.LENGTH_LONG).show();
}
});
}
} else {
Log.e(TAG, "Couldn''t get json from server.");
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity().getApplicationContext(),
"Couldn''t get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return laundryList;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(
getActivity(), result,
R.layout.laundry_detail, new String[]{"name", "AvailWasher", "TotalWasher", "AvailDryer",
"TotalDryer"}, new int[]{R.id.tvResidenceName, R.id.availWasher, R.id.totalwasher,
R.id.availDryer, R.id.totalDryer});
lv.setAdapter(adapter);
Toast.makeText(getActivity(),"hello from post execute",Toast.LENGTH_SHORT).show();
}
}
}
laundry_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/news_item_padding" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/news_item_padding"
android:orientation="vertical">
<TextView
android:id="@+id/tvResidenceName"
android:text="Residence Name"
android:textSize="20dp"
android:textColor="@color/ASTATE_DARK_GRAY"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Available Washers"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/availWasher"
android:text="2"
android:layout_gravity="right"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Total Washers"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/totalwasher"
android:text="10"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#DCDCDC"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Available Dryers"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/availDryer"
android:text="0"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Total Dryers"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/totalDryer"
android:text="10"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>