Added third level loading.
This commit is contained in:
parent
d1cc2cc3dc
commit
dc01b7960b
@ -33,6 +33,7 @@ import ru.volgorobot.vrcatalog.api.Controller;
|
||||
import ru.volgorobot.vrcatalog.api.VRApi;
|
||||
import ru.volgorobot.vrcatalog.model.FirstLevelModel;
|
||||
import ru.volgorobot.vrcatalog.model.SecondLevelModel;
|
||||
import ru.volgorobot.vrcatalog.model.ThirdLevelModel;
|
||||
|
||||
public class MainActivity extends AppCompatActivity
|
||||
implements NavigationView.OnNavigationItemSelectedListener, SwipeRefreshLayout.OnRefreshListener {
|
||||
@ -42,6 +43,8 @@ public class MainActivity extends AppCompatActivity
|
||||
private List<FirstLevelModel> firstLevelObjects = new ArrayList<>();
|
||||
private List<TreeNode> firstLevelNodes = new ArrayList<>();
|
||||
private List<SecondLevelModel> secondLevelObjects = new ArrayList<>();
|
||||
private List<ThirdLevelModel> thirdLevelObjects = new ArrayList<>();
|
||||
|
||||
private TreeNode rootNode = TreeNode.root();
|
||||
private SwipeRefreshLayout mSwipeRefreshLayout;
|
||||
|
||||
@ -119,6 +122,9 @@ public class MainActivity extends AppCompatActivity
|
||||
firstLevelNodes.add(new TreeNode(firstLevelObjects.get(i).getName()));
|
||||
firstLevelNodes.get(i).setLevel(0);
|
||||
firstLevelNodes.get(i).setChildren(getSecondLevelNodesByParentID(firstLevelObjects.get(i).getID()));
|
||||
for (int j = 0; j < firstLevelNodes.get(i).getChildren().size(); j++) {
|
||||
firstLevelNodes.get(i).getChildren().get(j).setChildren(getThirdLevelNodesByParentName((String) firstLevelNodes.get(i).getChildren().get(j).getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
rootNode.setChildren(firstLevelNodes);
|
||||
@ -139,6 +145,21 @@ public class MainActivity extends AppCompatActivity
|
||||
return nodes;
|
||||
}
|
||||
|
||||
private ArrayList<TreeNode> getThirdLevelNodesByParentName(String parentName) {
|
||||
ArrayList<ThirdLevelModel> objects = new ArrayList<>();
|
||||
for (int i = 0; i < thirdLevelObjects.size(); i++) {
|
||||
if(thirdLevelObjects.get(i).getName().equals(parentName)) {
|
||||
objects.add(thirdLevelObjects.get(i));
|
||||
}
|
||||
}
|
||||
ArrayList<TreeNode> nodes = new ArrayList<>();
|
||||
for (int i = 0; i < objects.size(); i++) {
|
||||
nodes.add(new TreeNode(objects.get(i).getName()));
|
||||
nodes.get(i).setLevel(2);
|
||||
}
|
||||
return nodes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
mSwipeRefreshLayout.setRefreshing(true);
|
||||
@ -162,8 +183,10 @@ public class MainActivity extends AppCompatActivity
|
||||
for (int i = 0; i < secondLevelObjects.size(); i++) {
|
||||
secondLevelObjects.remove(i);
|
||||
}
|
||||
for (int i = 0; i < thirdLevelObjects.size(); i++) {
|
||||
thirdLevelObjects.remove(i);
|
||||
}
|
||||
}
|
||||
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
String baseURL = sharedPreferences.getString("addressOfServer", "");
|
||||
|
||||
@ -172,9 +195,9 @@ public class MainActivity extends AppCompatActivity
|
||||
} catch(IllegalStateException e) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
class GetTreeData extends AsyncTask<Void, Void, Void> {
|
||||
class GetTreeData extends AsyncTask<Void, Void, Integer> {
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
protected Integer doInBackground(Void... voids) {
|
||||
try {
|
||||
Response<List<FirstLevelModel>> firstLevelResponse = vrApi.getFirstLevel().execute();
|
||||
if(firstLevelResponse.isSuccessful()) {
|
||||
@ -184,22 +207,39 @@ public class MainActivity extends AppCompatActivity
|
||||
if(secondLevelResponse.isSuccessful()) {
|
||||
secondLevelObjects.addAll(secondLevelResponse.body());
|
||||
} else {
|
||||
onFailureAnswer(1);
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < secondLevelObjects.size(); i++) {
|
||||
Response<List<ThirdLevelModel>> thirdLevelResponse = vrApi.getDetails(secondLevelObjects.get(i).getID()).execute();
|
||||
if(thirdLevelResponse.isSuccessful()) {
|
||||
thirdLevelObjects.addAll(thirdLevelResponse.body());
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
onFailureAnswer(0);
|
||||
return 1;
|
||||
}
|
||||
return null;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
protected void onPostExecute(Integer integer) {
|
||||
super.onPostExecute(integer);
|
||||
if(integer == 0) {
|
||||
fillRootNode();
|
||||
treeView.refreshTreeView();
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
} else if(integer == 1) {
|
||||
onFailureAnswer(1);
|
||||
} else if(integer == 2) {
|
||||
onFailureAnswer(2);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
new GetTreeData().execute();
|
||||
@ -207,15 +247,15 @@ public class MainActivity extends AppCompatActivity
|
||||
|
||||
private void onFailureAnswer(int errorCode) {
|
||||
switch (errorCode) {
|
||||
case 0: {
|
||||
Toast.makeText(MainActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show();
|
||||
Log.e("VRCatalog", "Network Error! Re-check your connection credentials or network settings!");
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
Toast.makeText(MainActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show();
|
||||
Log.e("VRCatalog", "Network Error! Re-check your connection credentials or network settings! Technical info: null");
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
Toast.makeText(MainActivity.this, "Ответ от сервера неверен! Перепроверьте данные подключения!", Toast.LENGTH_LONG).show();
|
||||
Log.e("VRCatalog", "Answer of server is wrong! Re-check your connection credentials!");
|
||||
Log.e("VRCatalog", "Answer of server is wrong! Re-check your connection credentials! Technical info: null");
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
break;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import retrofit2.http.GET;
|
||||
import retrofit2.http.Query;
|
||||
import ru.volgorobot.vrcatalog.model.FirstLevelModel;
|
||||
import ru.volgorobot.vrcatalog.model.SecondLevelModel;
|
||||
import ru.volgorobot.vrcatalog.model.ThirdLevelModel;
|
||||
|
||||
public interface VRApi {
|
||||
|
||||
@ -15,4 +16,7 @@ public interface VRApi {
|
||||
|
||||
@GET("/API/Api.php?action=getSecondLevel")
|
||||
Call<List<SecondLevelModel>> getSecondLevel(@Query("parentTypeID") int parentTypeID);
|
||||
|
||||
@GET("/API/Api.php?action=getDetailsByParentID")
|
||||
Call<List<ThirdLevelModel>> getDetails(@Query("parentID") int parentID);
|
||||
}
|
||||
|
@ -6,10 +6,6 @@ import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public class FirstLevelModel {
|
||||
|
||||
@SerializedName("Description")
|
||||
@Expose
|
||||
private Object description;
|
||||
|
||||
@SerializedName("Name")
|
||||
@Expose
|
||||
private String name;
|
||||
@ -18,28 +14,14 @@ public class FirstLevelModel {
|
||||
@Expose
|
||||
private Integer iD;
|
||||
|
||||
@SerializedName("Enable")
|
||||
@Expose
|
||||
private Boolean enable;
|
||||
|
||||
public FirstLevelModel() {
|
||||
// Empty constructor
|
||||
}
|
||||
|
||||
public FirstLevelModel(Object description, String name, Integer iD, Boolean enable) {
|
||||
super();
|
||||
this.description = description;
|
||||
public FirstLevelModel(String name, Integer iD) {
|
||||
this.name = name;
|
||||
this.iD = iD;
|
||||
this.enable = enable;
|
||||
}
|
||||
|
||||
public Object getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(Object description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
@ -58,12 +40,4 @@ public class FirstLevelModel {
|
||||
this.iD = iD;
|
||||
}
|
||||
|
||||
public Boolean getEnable() {
|
||||
return enable;
|
||||
}
|
||||
|
||||
public void setEnable(Boolean enable) {
|
||||
this.enable = enable;
|
||||
}
|
||||
|
||||
}
|
@ -13,10 +13,6 @@ public class SecondLevelModel {
|
||||
@Expose
|
||||
private Integer detailTypeId;
|
||||
|
||||
@SerializedName("Description")
|
||||
@Expose
|
||||
private Object description;
|
||||
|
||||
@SerializedName("Name")
|
||||
@Expose
|
||||
private String name;
|
||||
@ -25,10 +21,9 @@ public class SecondLevelModel {
|
||||
// Empty constructor
|
||||
}
|
||||
|
||||
public SecondLevelModel(Integer iD, Integer detailTypeId, Object description, String name) {
|
||||
public SecondLevelModel(Integer iD, Integer detailTypeId, String name) {
|
||||
this.iD = iD;
|
||||
this.detailTypeId = detailTypeId;
|
||||
this.description = description;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@ -48,14 +43,6 @@ public class SecondLevelModel {
|
||||
this.detailTypeId = detailTypeId;
|
||||
}
|
||||
|
||||
public Object getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(Object description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
@ -0,0 +1,62 @@
|
||||
package ru.volgorobot.vrcatalog.model;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public class ThirdLevelModel {
|
||||
|
||||
@SerializedName("ID")
|
||||
@Expose
|
||||
private Integer iD;
|
||||
@SerializedName("DetailSubTypeId")
|
||||
@Expose
|
||||
private Integer detailSubTypeId;
|
||||
@SerializedName("Name")
|
||||
@Expose
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* No args constructor for use in serialization
|
||||
*
|
||||
*/
|
||||
public ThirdLevelModel() {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param detailSubTypeId Parent category
|
||||
* @param name Name of detail
|
||||
* @param iD ID of detail
|
||||
*/
|
||||
public ThirdLevelModel(Integer iD, Integer detailSubTypeId, String name) {
|
||||
super();
|
||||
this.iD = iD;
|
||||
this.detailSubTypeId = detailSubTypeId;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getID() {
|
||||
return iD;
|
||||
}
|
||||
|
||||
public void setID(Integer iD) {
|
||||
this.iD = iD;
|
||||
}
|
||||
|
||||
public Integer getDetailSubTypeId() {
|
||||
return detailSubTypeId;
|
||||
}
|
||||
|
||||
public void setDetailSubTypeId(Integer detailSubTypeId) {
|
||||
this.detailSubTypeId = detailSubTypeId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user