Java tutorial
package models; /* ~ ******************************************************************************* ~ Copyright (c) 2013-2014 Daniel Lin, Kamal Chaya, Sean Penney, and Daniel Chuang ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. ~ ***************************************************************************** */ import com.example.t_danbubbletea.R; import java.util.concurrent.ExecutionException; import models.ApiConnector; import models.DatabaseTeaInfo; import models.TeaViewFragment; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import TabAdapterPackage.GridViewCustomAdapter; import android.app.Fragment; import android.os.AsyncTask; import android.os.Bundle; import android.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.GridView; import android.widget.AdapterView.OnItemClickListener; public class newArrivalFragment extends Fragment { DatabaseTeaInfo teaInfo = new DatabaseTeaInfo(); private boolean mShowingBack = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_newarrival, container, false); getActivity().setTitle("New Arrivals!"); //animation when enter home page rootView.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.image_click)); //download the URL's asynchronously (put the info in the teaInfo object) try { teaInfo = new GetTeaInfoTask().execute(new ApiConnector()).get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } //make the gridview and set its adapter GridView gridView = (GridView) rootView.findViewById(R.id.grid_view_new_arrival); GridViewCustomAdapter gvAdapter = new GridViewCustomAdapter(getActivity(), teaInfo.imageURLs, teaInfo.teaNames); gridView.setAdapter(gvAdapter); //onclick listener for gridview gridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Bundle teaViewArgs = new Bundle(); teaViewArgs.putString("teaName", teaInfo.teaNames.get(position)); teaViewArgs.putString("teaImgUrl", teaInfo.imageURLs.get(position)); teaViewArgs.putString("teaDesc", teaInfo.teaDescriptions.get(position)); Fragment newFragment = new TeaViewFragment(); newFragment.setArguments(teaViewArgs); if (newFragment != null) { flipCard(newFragment); } } private void flipCard(Fragment newFragment) { mShowingBack = true; FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .setCustomAnimations(R.anim.card_flip_right_in, R.anim.card_flip_right_out, R.anim.card_flip_left_in, R.anim.card_flip_left_out) .replace(R.id.frame_container, newFragment).addToBackStack(null).commit(); // create new fragment and allow user to go back to previous fragment } }); return rootView; } /* * Asynchronously query database for all the new tea tuples, and get the URL's from * the URL field */ private class GetTeaInfoTask extends AsyncTask<ApiConnector, Long, DatabaseTeaInfo> { DatabaseTeaInfo teaInfoFromDb = new DatabaseTeaInfo(); @Override protected DatabaseTeaInfo doInBackground(ApiConnector... arg0) { //Query database to get tuples in json format JSONArray jsonArrayTeas = arg0[0].GetAllTeas(); //iterate through json array and populate database tea info object for (int i = 0; i < jsonArrayTeas.length(); i++) { JSONObject json = null; try { json = jsonArrayTeas.getJSONObject(i); /* * The URL is a little FUBAR'ed when it is returned in JSON * format with weird backslashes and forward slashes. This bit * of code makes everything a forward slash, making it a valid URL. * * Here, we only want the 'new' teas, so we only put into the array * the tea objects whose new field set to "1" in the database. */ if (json.getInt("new") == 1) { String parsedURL = ("http://" + json.getString("imageURL")).replace("\\", ""); teaInfoFromDb.imageURLs.add(i, parsedURL); teaInfoFromDb.teaDescriptions.add(i, json.getString("desc")); teaInfoFromDb.teaNames.add(i, json.getString("name")); //teaInfoFromDb.teaBitmaps.add(i, imageLoader.getBitmap(parsedURL)); //Log.d(TAG, json.getString("name")); } } catch (JSONException e) { e.printStackTrace(); } } //return the database teainfo object so image urls can be used by imageloader return teaInfoFromDb; } } }