Display data related in view (Activity) on click

399
November 28, 2016, at 7:54 PM

I am getting my Json Object / Array from my Api and print it into my view, foreach array I print the id the name in my MainActivity.

Foreach array data I create a button. I want to move to another Activity and show the related data of the current array.

My view looks something like this:

________________________
id     name      button      <- if one clicks on the button another activity shall show the description of it
________________________

My big issue is how to show the related data in another activity.

My MainActivity looks like this:

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    private final static String TAG = MainActivity.class.getSimpleName();
    private ProgressDialog pDialog;
    private ListView lv;
    // URL to get contacts JSON
    private static String url = "http://192.168.178.58:8888/test";
    ArrayList<HashMap<String, String>> contactList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        contactList = new ArrayList<>();
        new GetContacts().execute();
        lv = (ListView) findViewById(R.id.list);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }
    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setCancelable(false);
            pDialog.show();
        }
        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);
            if (jsonStr != null) {
                try {
                    // Getting JSON Array node
                    JSONArray jsonArray = new JSONArray(jsonStr);
                    // looping through All Contacts
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject c = jsonArray.getJSONObject(i);
                        String id = c.getString("id");
                        String name = c.getString("name");
                        String description = c.getString("description");
                        // tmp hash map for single contact
                        HashMap<String, String> data = new HashMap<>();
                        // adding each child node to HashMap key => value
                        data.put("id", id);
                        data.put("name", name);
                        data.put("description", description);
                        // adding contact to contact list
                        contactList.add(data);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }
            return null;
        }
        /**
         * In onPostExecute() method the progress dialog is dismissed and the array list data is displayed in list view using an adapter.
         * @param result
         */
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             */
            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, contactList,
                    R.layout.list_item,
                    new String[]{"name", "description"},
                    new int[]{R.id.name, R.id.description});
            lv.setAdapter(adapter);
        }
    }
}
Answer 1

In general you can use a singleton to share non primitive data between activities.

something like this,

public class MyData {
  private Object data;
  public Object getData() {
   return data;
  }
  public void setData(Object data) {
   this.data = data;
  }
  private static final MyData myData = new MyData();
  public static MyData getInstance() {
   return myData;
  }
}

then in the first activity:

MyData.getInstance().setData(objToShare);

and in the second:

objShared = MyData.getInstance().getData();
//do something
Rent Charter Buses Company
READ ALSO
executing source command with JSch

executing source command with JSch

I have to two scripts, I want to execute on a serverThe problem is, that the frist script sets some environment variables and has to be executed via

347
Log4j2 pattern layout + negative number at Conversion Pattern

Log4j2 pattern layout + negative number at Conversion Pattern

I am using log4j2 25 and trying to alter the pattern layout in order to shorten the package output

466
popUp showed up using netbeans run , but not with the jar file ,JAVAFX

popUp showed up using netbeans run , but not with the jar file ,JAVAFX

i have a problem , i'm trying to open a popUp window with javaFX , in netbeans , work fine , but after trying the jar files it doesn't show , after running with cmd , i get this error ,

292
Why Java needs Serializable interface?

Why Java needs Serializable interface?

We work heavily with serialization and having to specify Serializable tag on every object we use is kind of a burdenEspecially when it's a 3rd-party class that we can't really change

290