Dodaj algorytm rekomendacji do activity Results, komunikat w przypadku braku znalezienia żadnych, usprawnij budowanie listy wszystkich produktów, dodaj zawijanie tekstu kafelka zidentyfikowanego produktu
This commit is contained in:
parent
f4d742f917
commit
7bf66b1f8f
@ -39,4 +39,6 @@ dependencies {
|
|||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||||
implementation 'com.github.bumptech.glide:glide:3.7.0'
|
implementation 'com.github.bumptech.glide:glide:3.7.0'
|
||||||
|
implementation group: 'com.google.guava', name: 'guava', version: '15.0'
|
||||||
|
implementation 'com.android.support:support-v4:26.0.2'
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,10 @@ import androidx.recyclerview.widget.GridLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.google.common.base.Functions;
|
||||||
|
import com.google.common.collect.ImmutableSortedMap;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Ordering;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
@ -27,7 +31,10 @@ import org.json.JSONObject;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
@ -37,6 +44,7 @@ public class Results extends AppCompatActivity {
|
|||||||
|
|
||||||
private static final String TAG = MainActivity.class.getSimpleName();
|
private static final String TAG = MainActivity.class.getSimpleName();
|
||||||
private List<Product> products;
|
private List<Product> products;
|
||||||
|
private List<Product> productstop6;
|
||||||
private RecyclerView recyclerView;
|
private RecyclerView recyclerView;
|
||||||
private GridLayoutManager gridLayout;
|
private GridLayoutManager gridLayout;
|
||||||
private ProductsAdapter adapter;
|
private ProductsAdapter adapter;
|
||||||
@ -51,34 +59,24 @@ public class Results extends AppCompatActivity {
|
|||||||
|
|
||||||
recyclerView = findViewById(R.id.recyclerview);
|
recyclerView = findViewById(R.id.recyclerview);
|
||||||
products = new ArrayList<>();
|
products = new ArrayList<>();
|
||||||
getProductsFromDB(0);
|
productstop6 = new ArrayList<>();
|
||||||
|
getProductsFromDB();
|
||||||
|
|
||||||
gridLayout = new GridLayoutManager(this, 2);
|
gridLayout = new GridLayoutManager(this, 2);
|
||||||
recyclerView.setLayoutManager(gridLayout);
|
recyclerView.setLayoutManager(gridLayout);
|
||||||
|
|
||||||
adapter = new ProductsAdapter(this, products);
|
adapter = new ProductsAdapter(this, productstop6);
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
private void getProductsFromDB() {
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak") AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
protected Void doInBackground(Void... Void) {
|
||||||
|
|
||||||
if (gridLayout.findLastCompletelyVisibleItemPosition() == products.size() - 1) {
|
|
||||||
getProductsFromDB(products.get(products.size() - 1).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getProductsFromDB(int id) {
|
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak") AsyncTask<Integer, Void, Void> asyncTask = new AsyncTask<Integer, Void, Void>() {
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground(Integer... productIds) {
|
|
||||||
|
|
||||||
OkHttpClient client = new OkHttpClient();
|
OkHttpClient client = new OkHttpClient();
|
||||||
Request request = new Request.Builder().url("http://192.168.8.101/products.php?id=" + productIds[0]).build();
|
Request request = new Request.Builder().url("http://192.168.8.101/products.php?id=0").build();
|
||||||
try {
|
try {
|
||||||
Response response = client.newCall(request).execute();
|
Response response = client.newCall(request).execute();
|
||||||
|
|
||||||
@ -122,13 +120,12 @@ public class Results extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(foundPosition == -1){
|
if(foundPosition == -1){
|
||||||
Intent intent_DecodeFail = new Intent(this, DecodeFail.class);
|
Intent intent_DecodeFail = new Intent(Results.this, DecodeFail.class);
|
||||||
startActivity(intent_DecodeFail);
|
startActivity(intent_DecodeFail);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
int foundPosition = 2; //TESTESTSRETSTETSTETT
|
||||||
int foundPosition = 1; //TESTESTSRETSTETSTETT
|
|
||||||
|
|
||||||
ImageView imageView = findViewById(R.id.foundproductimage);
|
ImageView imageView = findViewById(R.id.foundproductimage);
|
||||||
TextView foundProductPrice = findViewById(R.id.foundproductprice);
|
TextView foundProductPrice = findViewById(R.id.foundproductprice);
|
||||||
@ -156,10 +153,11 @@ public class Results extends AppCompatActivity {
|
|||||||
openDetails(finalFoundPosition);
|
openDetails(finalFoundPosition);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
getRecommendedProducts(finalFoundPosition);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
asyncTask.execute();
|
||||||
asyncTask.execute(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openDetails(int position){
|
public void openDetails(int position){
|
||||||
@ -186,4 +184,51 @@ public class Results extends AppCompatActivity {
|
|||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getRecommendedProducts(int foundpos){
|
||||||
|
HashMap<Integer, Integer> ranking = new HashMap<>();
|
||||||
|
for(int i = 0; i < products.size(); i++) {
|
||||||
|
if (products.get(foundpos).getId() != products.get(i).getId()
|
||||||
|
&& products.get(foundpos).getproductType().equals(products.get(i).getproductType())
|
||||||
|
&& products.get(foundpos).getproductSex().equals(products.get(i).getproductSex())) {
|
||||||
|
int counter = 0;
|
||||||
|
if (products.get(foundpos).getproductColour().equals(products.get(i).getproductColour())) {
|
||||||
|
counter++;
|
||||||
}
|
}
|
||||||
|
if (products.get(foundpos).getproductStyle().equals(products.get(i).getproductStyle())) {
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if (products.get(foundpos).getproductCollection().equals(products.get(i).getproductCollection())
|
||||||
|
|| products.get(foundpos).getproductCollection().equals("całoroczna")
|
||||||
|
|| products.get(i).getproductCollection().equals("całoroczna")) {
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
ranking.put(i, counter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ranking.size() == 0){
|
||||||
|
TextView noproductsmessage = findViewById(R.id.noproductsmessage);
|
||||||
|
noproductsmessage.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Ordering<Map.Entry<Integer, Integer>> byMapValues = new Ordering<Map.Entry<Integer, Integer>>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Map.Entry<Integer, Integer> left, Map.Entry<Integer, Integer> right) {
|
||||||
|
return left.getValue().compareTo(right.getValue());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
List<Map.Entry<Integer, Integer>> rankinglist = Lists.newArrayList(ranking.entrySet());
|
||||||
|
Collections.sort(rankinglist, byMapValues.reverse());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(int i = 0; i < 6; i++) {
|
||||||
|
productstop6.add(products.get(rankinglist.get(i).getKey()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:text="Ups! Kodu kreskowego nie znaleziono!"
|
android:text="Ups! Kodu nie znaleziono lub nie znajduje się on w bazie!"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/try_again_button"
|
app:layout_constraintBottom_toTopOf="@+id/try_again_button"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.8">
|
android:layout_weight="0.785">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/header"
|
android:id="@+id/header"
|
||||||
@ -43,11 +43,12 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/foundproductname"
|
android:id="@+id/foundproductname"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="181dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_marginLeft="8dp"
|
android:layout_marginLeft="8dp"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
|
app:autoSizeTextType="uniform"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/header" />
|
app:layout_constraintTop_toBottomOf="@+id/header" />
|
||||||
|
|
||||||
@ -98,8 +99,21 @@
|
|||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.215"
|
||||||
android:background="#2196F3">
|
android:background="#3889FF">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/noproductsmessage"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_marginTop="218dp"
|
||||||
|
android:layout_marginEnd="34dp"
|
||||||
|
android:layout_marginRight="34dp"
|
||||||
|
android:text="Nie znaleziono żadnych podobnych produktów..."
|
||||||
|
android:visibility = "gone"/>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/recyclerview"
|
android:id="@+id/recyclerview"
|
||||||
@ -113,5 +127,4 @@
|
|||||||
card_view:cardElevation="4dp"
|
card_view:cardElevation="4dp"
|
||||||
card_view:cardUseCompatPadding="true" />
|
card_view:cardUseCompatPadding="true" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
Loading…
Reference in New Issue
Block a user