From fca04137baf1125190c07438435c8d1b16c42152 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 09:42:03 +0000 Subject: [PATCH 1/7] start of backend files and user class --- ListViewExample/app/build.gradle | 5 +++ .../listviewexample/backend/main/Fetcher.java | 4 +++ .../listviewexample/backend/main/User.java | 31 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java create mode 100644 ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java diff --git a/ListViewExample/app/build.gradle b/ListViewExample/app/build.gradle index 44ff798..7932151 100644 --- a/ListViewExample/app/build.gradle +++ b/ListViewExample/app/build.gradle @@ -19,6 +19,11 @@ android { } dependencies { + implementation group: 'org.slf4j', name:'slf4j-api', version: '1.7.2' + implementation group: 'ch.qos.logback', name:'logback-classic', version: '1.0.9' + implementation group: 'ch.qos.logback', name:'logback-core', version: '1.0.9' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.7.0' + implementation 'org.projectlombok:lombok:1.18.4' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java new file mode 100644 index 0000000..074affd --- /dev/null +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java @@ -0,0 +1,4 @@ +package com.loot.markhardwick.listviewexample.backend.main; + +public class Fetcher { +} diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java new file mode 100644 index 0000000..b1302e3 --- /dev/null +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java @@ -0,0 +1,31 @@ +package com.loot.markhardwick.listviewexample.backend.main; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Setter @Getter +@AllArgsConstructor +public class User { + int id; + String name, username, email, phone, website; + Address adress; + Company company; + + @Setter @Getter + @AllArgsConstructor + class Address { + String street, suite, city, zipcode; + Geo geo; + + class Geo{ + String latitude,longitude; + } + } + + @Setter @Getter + @AllArgsConstructor + class Company { + String name, catchphrase, bs; + } +} From d9e5aa93008ecf446d2717bf3ee77bdfaf5b5b45 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 11:42:19 +0000 Subject: [PATCH 2/7] + users fetched from url and turned into array of objects --- ListViewExample/app/build.gradle | 11 +++- .../listviewexample/backend/main/Fetcher.java | 61 ++++++++++++++++++- .../listviewexample/backend/main/User.java | 20 ++++-- .../backend/main/FetcherTest.java | 17 ++++++ 4 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 ListViewExample/app/src/test/java/com/loot/markhardwick/listviewexample/backend/main/FetcherTest.java diff --git a/ListViewExample/app/build.gradle b/ListViewExample/app/build.gradle index 7932151..4c1a2ad 100644 --- a/ListViewExample/app/build.gradle +++ b/ListViewExample/app/build.gradle @@ -18,12 +18,17 @@ android { } } +repositories { + mavenCentral() +} + dependencies { - implementation group: 'org.slf4j', name:'slf4j-api', version: '1.7.2' - implementation group: 'ch.qos.logback', name:'logback-classic', version: '1.0.9' - implementation group: 'ch.qos.logback', name:'logback-core', version: '1.0.9' + implementation 'org.slf4j:slf4j-api:1.7.25' + implementation 'ch.qos.logback:logback-classic:1.0.9' + implementation 'ch.qos.logback:logback-core:1.0.9' implementation 'com.fasterxml.jackson.core:jackson-databind:2.7.0' implementation 'org.projectlombok:lombok:1.18.4' + annotationProcessor 'org.projectlombok:lombok:1.18.4' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java index 074affd..e11c1af 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java @@ -1,4 +1,63 @@ package com.loot.markhardwick.listviewexample.backend.main; -public class Fetcher { +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Arrays; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Slf4j +class Fetcher { + static User[] users = null; + + static void fetchUsers() { + log.debug("fetchUsers() called"); + URL url; + HttpURLConnection con; + try { + String urlAddress = "https://jsonplaceholder.typicode.com/users"; + url = new URL(urlAddress); + con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("Content-Type", "application/json"); + int status = con.getResponseCode(); + log.debug("Http Response Code: {}", status); + if (getBaseResponseCode(status) == 2){ + InputStream inputStream = con.getInputStream(); + handleResponse(inputStream); + } else { + log.error("Http Error Code: {}", status); + } + } catch (java.io.IOException e) { + log.error(e.getMessage()); + log.error(Arrays.toString(e.getStackTrace())); + } + } + + private static void handleResponse(InputStream inputStream){ + log.debug("handleResponse() called"); + ObjectMapper mapper = new ObjectMapper(); + try { + users = mapper.readValue(inputStream, User[].class); + log.debug("New contents of Users:"); + log.debug(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(users)); + log.debug("Successful response handle"); + } catch (IOException e) { + log.error(e.getMessage()); + log.error(Arrays.toString(e.getStackTrace())); + } + } + + private static int getBaseResponseCode(int x) { + while (x > 10) { + x = x / 10; + } + return x; + } } diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java index b1302e3..b7bb4e2 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java @@ -2,30 +2,40 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; @Setter @Getter @AllArgsConstructor -public class User { +@NoArgsConstructor +@Slf4j +class User { int id; String name, username, email, phone, website; - Address adress; + Address address; Company company; @Setter @Getter @AllArgsConstructor + @NoArgsConstructor class Address { String street, suite, city, zipcode; Geo geo; - class Geo{ - String latitude,longitude; + @Setter @Getter + @AllArgsConstructor + @NoArgsConstructor + class Geo { + String lat, lng; } } @Setter @Getter @AllArgsConstructor + @NoArgsConstructor class Company { - String name, catchphrase, bs; + String name, catchPhrase, bs; } } + diff --git a/ListViewExample/app/src/test/java/com/loot/markhardwick/listviewexample/backend/main/FetcherTest.java b/ListViewExample/app/src/test/java/com/loot/markhardwick/listviewexample/backend/main/FetcherTest.java new file mode 100644 index 0000000..3639481 --- /dev/null +++ b/ListViewExample/app/src/test/java/com/loot/markhardwick/listviewexample/backend/main/FetcherTest.java @@ -0,0 +1,17 @@ +package com.loot.markhardwick.listviewexample.backend.main; + +import org.junit.Test; + +import static com.loot.markhardwick.listviewexample.backend.main.Fetcher.fetchUsers; +import static org.junit.Assert.*; + +public class FetcherTest { + + @Test + public void fetchUsersTest() { + fetchUsers(); + assertNotEquals(null, Fetcher.users); + //On the url given it should be ten but in case it were used with a different amount have tested finding more than one + assert(Fetcher.users.length >= 1); + } +} \ No newline at end of file From bc7c8145daaa595e7a8ac217d883fba1156d5972 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 12:10:29 +0000 Subject: [PATCH 3/7] + add some commenting at the top --- .../markhardwick/listviewexample/backend/main/Fetcher.java | 6 ++++++ .../markhardwick/listviewexample/backend/main/User.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java index e11c1af..f070115 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java @@ -11,6 +11,12 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; +/** + * Class to grab json array of users from: + * https://jsonplaceholder.typicode.com/users + * and turn response into an array of objects + */ + @Getter @Slf4j class Fetcher { diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java index b7bb4e2..91d9902 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java @@ -6,6 +6,10 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; +/** + * POJO for jackson deserialization of users + */ + @Setter @Getter @AllArgsConstructor @NoArgsConstructor From 83e95ff77b2e7c8d3d9ed2b30cb562a7ae94d370 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 13:44:43 +0000 Subject: [PATCH 4/7] + Redo view model --- .../app/src/main/AndroidManifest.xml | 1 + .../listviewexample/MainActivity.java | 59 ++++++++++++++++--- .../listviewexample/backend/main/Fetcher.java | 19 ++++-- .../listviewexample/backend/main/User.java | 2 +- .../listviewexample/ui/main/MainFragment.java | 36 ----------- .../ui/main/MainViewModel.java | 7 --- .../app/src/main/res/layout/main_activity.xml | 29 ++++++++- .../app/src/main/res/layout/main_fragment.xml | 20 ------- .../app/src/main/res/values/colors.xml | 1 + 9 files changed, 97 insertions(+), 77 deletions(-) delete mode 100644 ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainFragment.java delete mode 100644 ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainViewModel.java delete mode 100644 ListViewExample/app/src/main/res/layout/main_fragment.xml diff --git a/ListViewExample/app/src/main/AndroidManifest.xml b/ListViewExample/app/src/main/AndroidManifest.xml index 2b19eb3..e15994e 100644 --- a/ListViewExample/app/src/main/AndroidManifest.xml +++ b/ListViewExample/app/src/main/AndroidManifest.xml @@ -18,4 +18,5 @@ + \ No newline at end of file diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java index 3a310c3..8172767 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java @@ -1,20 +1,65 @@ package com.loot.markhardwick.listviewexample; -import android.support.v7.app.AppCompatActivity; +import android.app.Activity; +import android.content.Context; import android.os.Bundle; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.ProgressBar; -import com.loot.markhardwick.listviewexample.ui.main.MainFragment; +import com.loot.markhardwick.listviewexample.backend.main.Fetcher; +import com.loot.markhardwick.listviewexample.backend.main.User; -public class MainActivity extends AppCompatActivity { +import java.util.HashMap; + +public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); - if (savedInstanceState == null) { - getSupportFragmentManager().beginTransaction() - .replace(R.id.container, MainFragment.newInstance()) - .commitNow(); + + Fetcher fetcher = new Fetcher(); + fetcher.execute(); + + final ListView listView = findViewById(R.id.listView); + final ProgressBar progressBar = findViewById(R.id.progressBar); + listView.setEmptyView(progressBar); + final ListAdapter adapter = new ListAdapter(this, android.R.layout.simple_list_item_1,Fetcher.getUsers()); + listView.setAdapter(adapter); + + listView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //TODO something? + } + }); + } + + private class ListAdapter extends ArrayAdapter { + HashMap mIdMap = new HashMap<>(); + + ListAdapter(Context context, int textViewResourceId, User[] objects) { + super(context, textViewResourceId, objects); + for (int i = 0; i < objects.length; ++i) { + mIdMap.put(objects[i], i); + } + } + + @Override + public long getItemId(int position) { + User item = getItem(position); + try { + return mIdMap.get(item); + } catch(NullPointerException e){ + return -1; + } + } + + @Override + public boolean hasStableIds() { + return true; } } } diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java index f070115..f9c213c 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java @@ -1,5 +1,7 @@ package com.loot.markhardwick.listviewexample.backend.main; +import android.os.AsyncTask; + import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; @@ -8,7 +10,6 @@ import java.net.URL; import java.util.Arrays; -import lombok.Getter; import lombok.extern.slf4j.Slf4j; /** @@ -17,10 +18,9 @@ * and turn response into an array of objects */ -@Getter @Slf4j -class Fetcher { - static User[] users = null; +public class Fetcher extends AsyncTask { + static User[] users = new User[0]; static void fetchUsers() { log.debug("fetchUsers() called"); @@ -66,4 +66,15 @@ private static int getBaseResponseCode(int x) { } return x; } + + public static User[] getUsers(){ + return users; + } + + @Override + protected User[] doInBackground(String ... voids) { + fetchUsers(); + users.notify(); + return users; + } } diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java index 91d9902..7f272c0 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java @@ -14,7 +14,7 @@ @AllArgsConstructor @NoArgsConstructor @Slf4j -class User { +public class User { int id; String name, username, email, phone, website; Address address; diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainFragment.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainFragment.java deleted file mode 100644 index dd38eef..0000000 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainFragment.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.loot.markhardwick.listviewexample.ui.main; - -import android.arch.lifecycle.ViewModelProviders; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.loot.markhardwick.listviewexample.R; - -public class MainFragment extends Fragment { - - private MainViewModel mViewModel; - - public static MainFragment newInstance() { - return new MainFragment(); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.main_fragment, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mViewModel = ViewModelProviders.of(this).get(MainViewModel.class); - // TODO: Use the ViewModel - } - -} diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainViewModel.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainViewModel.java deleted file mode 100644 index 15581d6..0000000 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/ui/main/MainViewModel.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.loot.markhardwick.listviewexample.ui.main; - -import android.arch.lifecycle.ViewModel; - -public class MainViewModel extends ViewModel { - // TODO: Implement the ViewModel -} diff --git a/ListViewExample/app/src/main/res/layout/main_activity.xml b/ListViewExample/app/src/main/res/layout/main_activity.xml index 1de2219..4b8cd3c 100644 --- a/ListViewExample/app/src/main/res/layout/main_activity.xml +++ b/ListViewExample/app/src/main/res/layout/main_activity.xml @@ -1,7 +1,32 @@ - + tools:context=".MainActivity"> + + + + + diff --git a/ListViewExample/app/src/main/res/layout/main_fragment.xml b/ListViewExample/app/src/main/res/layout/main_fragment.xml deleted file mode 100644 index e94006e..0000000 --- a/ListViewExample/app/src/main/res/layout/main_fragment.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/ListViewExample/app/src/main/res/values/colors.xml b/ListViewExample/app/src/main/res/values/colors.xml index 69b2233..e9d5cee 100644 --- a/ListViewExample/app/src/main/res/values/colors.xml +++ b/ListViewExample/app/src/main/res/values/colors.xml @@ -3,4 +3,5 @@ #008577 #00574B #D81B60 + #00577A From 64b7fed4939f4bbc3dc5fcb70c102e2b71031a0d Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 15:01:45 +0000 Subject: [PATCH 5/7] + basic listview working --- .../listviewexample/MainActivity.java | 99 ++++++++++++++----- .../listviewexample/backend/main/Fetcher.java | 19 +++- .../listviewexample/backend/main/User.java | 10 +- .../app/src/main/res/layout/main_activity.xml | 6 +- .../app/src/main/res/layout/row.xml | 65 ++++++++++++ .../app/src/main/res/values/strings.xml | 8 ++ 6 files changed, 172 insertions(+), 35 deletions(-) create mode 100644 ListViewExample/app/src/main/res/layout/row.xml diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java index 8172767..490c462 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java @@ -1,65 +1,110 @@ package com.loot.markhardwick.listviewexample; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; -import android.widget.ArrayAdapter; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.ProgressBar; +import android.widget.TextView; import com.loot.markhardwick.listviewexample.backend.main.Fetcher; import com.loot.markhardwick.listviewexample.backend.main.User; -import java.util.HashMap; - public class MainActivity extends Activity { + ListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); - Fetcher fetcher = new Fetcher(); - fetcher.execute(); - - final ListView listView = findViewById(R.id.listView); - final ProgressBar progressBar = findViewById(R.id.progressBar); + ListView listView = findViewById(R.id.listView); + ProgressBar progressBar = findViewById(R.id.progressBar); listView.setEmptyView(progressBar); - final ListAdapter adapter = new ListAdapter(this, android.R.layout.simple_list_item_1,Fetcher.getUsers()); + + adapter = new ListAdapter(this, Fetcher.getUsers()); listView.setAdapter(adapter); - listView.setOnClickListener(new View.OnClickListener() { + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override - public void onClick(View v) { - //TODO something? + public void onItemClick(AdapterView parent, View view, int position, long id) { + //TODO } }); + + Fetcher fetcher = new Fetcher(new Fetcher.FetcherResponse() { + @Override + public void processFinish(User[] newUserList) { + adapter.updateUsers(newUserList); + } + }); + fetcher.execute(); } - private class ListAdapter extends ArrayAdapter { - HashMap mIdMap = new HashMap<>(); + private class ListAdapter extends BaseAdapter { + Context context; + User[] users; + private LayoutInflater inflater; - ListAdapter(Context context, int textViewResourceId, User[] objects) { - super(context, textViewResourceId, objects); - for (int i = 0; i < objects.length; ++i) { - mIdMap.put(objects[i], i); - } + ListAdapter(Context context, User[] users) { + this.context = context; + this.users = users; + inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + public void updateUsers(User[] newUsers){ + users = newUsers; + this.notifyDataSetChanged(); + } + + @Override + public int getCount() { + return users.length; + } + + @Override + public Object getItem(int position) { + return users[position]; } @Override public long getItemId(int position) { - User item = getItem(position); - try { - return mIdMap.get(item); - } catch(NullPointerException e){ - return -1; - } + return position; } + @SuppressLint("DefaultLocale") @Override - public boolean hasStableIds() { - return true; + public View getView(int position, View convertView, ViewGroup parent) { + View toReturn = convertView; + if(toReturn == null){ + toReturn = inflater.inflate(R.layout.row, null); + } + User user = users[position]; + TextView idField = toReturn.findViewById(R.id.idNumber); + idField.setText(String.format("%s%d", getString(R.string.id), user.getId())); + TextView nameField = toReturn.findViewById(R.id.name); + nameField.setText(String.format("%s%s", getString(R.string.name), user.getName())); + TextView usernameField = toReturn.findViewById(R.id.username); + usernameField.setText(String.format("%s%s", getString(R.string.username), user.getUsername())); + TextView emailField = toReturn.findViewById(R.id.email); + emailField.setText(String.format("%s%s", getString(R.string.email), user.getEmail())); + TextView addressField = toReturn.findViewById(R.id.address); + addressField.setText(String.format("%s%s", getString(R.string.address), user.getAddress().toString())); + TextView phoneField = toReturn.findViewById(R.id.phone); + phoneField.setText(String.format("%s%s", getString(R.string.phone), user.getPhone())); + TextView websiteField = toReturn.findViewById(R.id.website); + websiteField.setText(String.format("%s%s", getString(R.string.website), user.getWebsite())); + TextView companyField = toReturn.findViewById(R.id.company); + companyField.setText(String.format("%s%s", getString(R.string.company), user.getCompany().toString())); + return toReturn; } } } + + diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java index f9c213c..b9e120f 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/Fetcher.java @@ -19,8 +19,13 @@ */ @Slf4j -public class Fetcher extends AsyncTask { +public class Fetcher extends AsyncTask { static User[] users = new User[0]; + private FetcherResponse delegate; + + public Fetcher(FetcherResponse delegate){ + this.delegate = delegate; + } static void fetchUsers() { log.debug("fetchUsers() called"); @@ -72,9 +77,17 @@ public static User[] getUsers(){ } @Override - protected User[] doInBackground(String ... voids) { + protected User[] doInBackground(Void ... voids) { fetchUsers(); - users.notify(); return users; } + + @Override + protected void onPostExecute(User[] result) { + delegate.processFinish(result); + } + + public interface FetcherResponse { + void processFinish(User[] newUserList); + } } diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java index 7f272c0..9488b6d 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/backend/main/User.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; import lombok.extern.slf4j.Slf4j; /** @@ -20,25 +21,28 @@ public class User { Address address; Company company; + @ToString @Setter @Getter @AllArgsConstructor @NoArgsConstructor - class Address { + public class Address { String street, suite, city, zipcode; Geo geo; + @ToString @Setter @Getter @AllArgsConstructor @NoArgsConstructor - class Geo { + public class Geo { String lat, lng; } } + @ToString @Setter @Getter @AllArgsConstructor @NoArgsConstructor - class Company { + public class Company { String name, catchPhrase, bs; } } diff --git a/ListViewExample/app/src/main/res/layout/main_activity.xml b/ListViewExample/app/src/main/res/layout/main_activity.xml index 4b8cd3c..faa03d8 100644 --- a/ListViewExample/app/src/main/res/layout/main_activity.xml +++ b/ListViewExample/app/src/main/res/layout/main_activity.xml @@ -1,11 +1,13 @@ - + tools:context=".MainActivity" + > + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ListViewExample/app/src/main/res/values/strings.xml b/ListViewExample/app/src/main/res/values/strings.xml index 96d20b6..78a4cb5 100644 --- a/ListViewExample/app/src/main/res/values/strings.xml +++ b/ListViewExample/app/src/main/res/values/strings.xml @@ -1,3 +1,11 @@ ListViewExample + Id: + Name: + Username: + Email: + Phone: + Website: + Address: + Company: From f507117469a272366688e63d60372ce04dfbc329 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 15:42:37 +0000 Subject: [PATCH 6/7] + backtrack to do just name in row as task requires --- .../listviewexample/MainActivity.java | 9 ++++--- .../app/src/main/res/layout/main_activity.xml | 26 +++++++++++++++---- .../app/src/main/res/layout/row_just_name.xml | 18 +++++++++++++ .../app/src/main/res/values/colors.xml | 1 + .../app/src/main/res/values/strings.xml | 1 + 5 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 ListViewExample/app/src/main/res/layout/row_just_name.xml diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java index 490c462..01ee0f0 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java @@ -83,13 +83,15 @@ public long getItemId(int position) { public View getView(int position, View convertView, ViewGroup parent) { View toReturn = convertView; if(toReturn == null){ - toReturn = inflater.inflate(R.layout.row, null); + toReturn = inflater.inflate(R.layout.row_just_name, null); } User user = users[position]; + TextView nameField = toReturn.findViewById(R.id.name); + nameField.setText(String.format("%s", user.getName())); + + /* Reread task was only for name and surname TextView idField = toReturn.findViewById(R.id.idNumber); idField.setText(String.format("%s%d", getString(R.string.id), user.getId())); - TextView nameField = toReturn.findViewById(R.id.name); - nameField.setText(String.format("%s%s", getString(R.string.name), user.getName())); TextView usernameField = toReturn.findViewById(R.id.username); usernameField.setText(String.format("%s%s", getString(R.string.username), user.getUsername())); TextView emailField = toReturn.findViewById(R.id.email); @@ -102,6 +104,7 @@ public View getView(int position, View convertView, ViewGroup parent) { websiteField.setText(String.format("%s%s", getString(R.string.website), user.getWebsite())); TextView companyField = toReturn.findViewById(R.id.company); companyField.setText(String.format("%s%s", getString(R.string.company), user.getCompany().toString())); + */ return toReturn; } } diff --git a/ListViewExample/app/src/main/res/layout/main_activity.xml b/ListViewExample/app/src/main/res/layout/main_activity.xml index faa03d8..4dd55b2 100644 --- a/ListViewExample/app/src/main/res/layout/main_activity.xml +++ b/ListViewExample/app/src/main/res/layout/main_activity.xml @@ -9,14 +9,30 @@ tools:context=".MainActivity" > - + + + + + + + + + + \ No newline at end of file diff --git a/ListViewExample/app/src/main/res/values/colors.xml b/ListViewExample/app/src/main/res/values/colors.xml index e9d5cee..0cce64b 100644 --- a/ListViewExample/app/src/main/res/values/colors.xml +++ b/ListViewExample/app/src/main/res/values/colors.xml @@ -4,4 +4,5 @@ #00574B #D81B60 #00577A + #FFF diff --git a/ListViewExample/app/src/main/res/values/strings.xml b/ListViewExample/app/src/main/res/values/strings.xml index 78a4cb5..dc29a8c 100644 --- a/ListViewExample/app/src/main/res/values/strings.xml +++ b/ListViewExample/app/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ ListViewExample + Users: Id: Name: Username: From f6e8526272cc1f15766068e77adc8fe6c0c5dab8 Mon Sep 17 00:00:00 2001 From: Mark Hardwick Date: Mon, 17 Dec 2018 15:47:34 +0000 Subject: [PATCH 7/7] + clean up --- .../loot/markhardwick/listviewexample/MainActivity.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java index 01ee0f0..d0fc769 100644 --- a/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java +++ b/ListViewExample/app/src/main/java/com/loot/markhardwick/listviewexample/MainActivity.java @@ -7,7 +7,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.ProgressBar; @@ -31,12 +30,14 @@ protected void onCreate(Bundle savedInstanceState) { adapter = new ListAdapter(this, Fetcher.getUsers()); listView.setAdapter(adapter); + /* Not needed for task will flesh out later listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - //TODO + } }); + */ Fetcher fetcher = new Fetcher(new Fetcher.FetcherResponse() { @Override @@ -58,7 +59,7 @@ private class ListAdapter extends BaseAdapter { inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } - public void updateUsers(User[] newUsers){ + void updateUsers(User[] newUsers){ users = newUsers; this.notifyDataSetChanged(); }