mirror of https://github.com/readrops/Readrops.git
attempt to make a simple recycler view to show the results of an rss request and parsing
This commit is contained in:
parent
f66e221a5b
commit
4d1d723158
Binary file not shown.
|
@ -34,4 +34,10 @@ dependencies {
|
|||
|
||||
implementation 'com.github.bumptech.glide:glide:4.8.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
|
||||
implementation 'com.squareup.retrofit2:converter-simplexml:2.4.0'
|
||||
|
||||
implementation 'com.android.support:recyclerview-v7:28.0.0'
|
||||
}
|
||||
|
|
|
@ -2,26 +2,102 @@ package com.readrops.app;
|
|||
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.DividerItemDecoration;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
|
||||
import com.readrops.readropslibrary.PageParser;
|
||||
import com.readrops.readropslibrary.Utils.Utils;
|
||||
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
||||
import com.readrops.readropslibrary.localfeed.rss.RSSFeed;
|
||||
import com.readrops.readropslibrary.localfeed.rss.RSSItem;
|
||||
|
||||
import org.simpleframework.xml.Serializer;
|
||||
import org.simpleframework.xml.core.Persister;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.Response;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
|
||||
String url = "https://framablog.org/";
|
||||
|
||||
private RecyclerView recyclerView;
|
||||
private MainAdapter adapter;
|
||||
|
||||
private List<RSSItem> itemList;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
Thread thread = new Thread(()-> {
|
||||
String feedUrl = PageParser.getFeedLink(url);
|
||||
|
||||
/*Thread thread = new Thread(() -> {
|
||||
String imageUrl = PageParser.getOGImageLink("https://usbeketrica.com/galerie/dennis-osadebe-portrait-of-a-bright-generation");
|
||||
Log.d("", "");
|
||||
|
||||
runOnUiThread(() -> {
|
||||
getItems();
|
||||
});
|
||||
});
|
||||
|
||||
thread.start();
|
||||
thread.start();*/
|
||||
|
||||
getItems();
|
||||
|
||||
}
|
||||
|
||||
private void getItems() {
|
||||
RSSNetwork request = new RSSNetwork();
|
||||
|
||||
request.request("https://www.numerama.com/feed/", new Callback() {
|
||||
@Override
|
||||
public void onFailure(Call call, IOException e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(Call call, Response response) throws IOException {
|
||||
if (response.isSuccessful()) {
|
||||
InputStream stream = response.body().byteStream();
|
||||
String xml = Utils.inputStreamToString(stream);
|
||||
|
||||
Serializer serializer = new Persister();
|
||||
|
||||
try {
|
||||
RSSFeed rssFeed = serializer.read(RSSFeed.class, xml);
|
||||
itemList = rssFeed.getChannel().getItems();
|
||||
|
||||
runOnUiThread(() -> {
|
||||
initRecyclerView();
|
||||
});
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
recyclerView = findViewById(R.id.items_recycler_view);
|
||||
adapter = new MainAdapter(this, itemList);
|
||||
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
|
||||
DividerItemDecoration decoration = new DividerItemDecoration(this, ((LinearLayoutManager) layoutManager).getOrientation());
|
||||
recyclerView.addItemDecoration(decoration);
|
||||
|
||||
recyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package com.readrops.app;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.Image;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.readrops.readropslibrary.PageParser;
|
||||
import com.readrops.readropslibrary.localfeed.rss.RSSItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
|
||||
|
||||
List<RSSItem> items;
|
||||
private Context context;
|
||||
|
||||
public MainAdapter(Context context, List<RSSItem> items) {
|
||||
this.context = context;
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
||||
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
|
||||
View view = inflater.inflate(R.layout.compact_list_element, viewGroup, false);
|
||||
|
||||
return new ViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
|
||||
RSSItem item = items.get(i);
|
||||
viewHolder.bind(item);
|
||||
|
||||
Thread thread = new Thread(() -> {
|
||||
String imageUrl = PageParser.getOGImageLink(item.getLink());
|
||||
Glide.with(context).load(imageUrl).into(viewHolder.itemImage);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return items.size();
|
||||
}
|
||||
|
||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
private TextView itemTitle;
|
||||
private ImageView itemImage;
|
||||
|
||||
ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
itemTitle = itemView.findViewById(R.id.item_title);
|
||||
itemImage = itemView.findViewById(R.id.item_image);
|
||||
}
|
||||
|
||||
private void bind(RSSItem item) {
|
||||
itemTitle.setText(item.getTitle());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,13 +6,13 @@
|
|||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello World!"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/items_recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="vertical">
|
||||
|
||||
|
||||
</android.support.v7.widget.RecyclerView>
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="qsdsdsfdksfdsfjdsklfdjsfdslkfjdsfjdsfjldksfjdsfdskfjdslfdksfkldsfdsfdsqd"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:minLines="1"
|
||||
android:maxLines="3"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_toLeftOf="@id/item_image"
|
||||
android:layout_toStartOf="@id/item_image"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/item_image"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="70dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginBottom="12dp"
|
||||
/>
|
||||
|
||||
|
||||
|
||||
</RelativeLayout>
|
|
@ -0,0 +1,13 @@
|
|||
package com.readrops.readropslibrary.Utils;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Scanner;
|
||||
|
||||
public final class Utils {
|
||||
|
||||
public static String inputStreamToString(InputStream input) {
|
||||
Scanner scanner = new Scanner(input).useDelimiter("\\A");
|
||||
return scanner.hasNext() ? scanner.next() : "";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.readrops.readropslibrary.localfeed;
|
||||
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
|
||||
public class RSSNetwork {
|
||||
|
||||
public void request(String url, okhttp3.Callback callback) {
|
||||
OkHttpClient okHttpClient = new OkHttpClient();
|
||||
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
|
||||
okHttpClient.newCall(request).enqueue(callback);
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue