LOADING . . .
Membuat Aplikasi dengan wordpress dan Android Studio - Selamat siang, mari lanjutkan seri Membuat Aplikasi Berita dengan Wordpress (Self Hosted) dan Android Studio, bagi anda yang belum mengikuti/membaca artikel sebelumnya, silahkan anda lihat terlebih dahulu beberapa artikel dibawah:
Pada artikel ini, sudah sampai di tahap programming java. Langsung saja dimulai, buka project wordpress anda di Android Studio.
Untuk tampilan layout dari activity_main.xml, silahkan anda baca kembali artikel sebelumnya. MainActivity akan secara langsung menampilkan data post wordpress pada RecycleView. Lihat kode berikut:
public class MainActivity extends AppCompatActivity {
RecyclerView post_list;
List<Post> posts;
PostsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
posts = new ArrayList<>();
post_list = findViewById(R.id.post_list);
extractPosts(getResources().getString(R.string.wp_url));
GridLayoutManager manager = new GridLayoutManager(this, 1);
post_list.setLayoutManager(manager);
adapter = new PostsAdapter(posts);
post_list.setAdapter(adapter);
}
public void extractPosts(String URL){
RequestQueue queue = Volley.newRequestQueue(this);
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d("TAG","onResponse: " + response.toString());
for(int i = 0; i < response.length();i++){
try{
Post p = new Post();
JSONObject jsonObjectData = response.getJSONObject(i);
p.setDate(jsonObjectData.getString("date"));
JSONObject titleObject = jsonObjectData.getJSONObject("title");
p.setTitle(titleObject.getString("rendered"));
JSONObject contentObject = jsonObjectData.getJSONObject("content");
p.setContent(contentObject.getString("rendered"));
JSONObject excerptObject = jsonObjectData.getJSONObject("excerpt");
p.setExcerpt(excerptObject.getString("rendered"));
p.setFeature_image(jsonObjectData.getString("featured_media_src_url"));
posts.add(p);
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.getMessage(),Toast.LENGTH_SHORT).show();
}
});
queue.add(request);
}
}
Pada kode java diatas, terlihat penggunaan PostAdapter. Jadi selanjutnya anda akan membuat sebuah PostAdapter.
Untuk mendapatkan data pada RecycleView memerlukan sebuah adapter. Adapter adalah class yang mengatur item-item pada RecycleView. Adapter mengatur resource view pada setiap item dari RecycleView. Buka Project Android Studio Pada folder java >> com >> suba >> wordpress >> Klik Kanan >> New >> Java Class >> Beri nama "postAdapter.java". Copy kode berikut dan paste pada postAdapter.java yang tadi anda buat.
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.List;
public class PostsAdapter extends RecyclerView.Adapter {
List allPosts;
public PostsAdapter(List allPosts) {
this.allPosts = allPosts;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_view, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.postTitle.setText(allPosts.get(position).getTitle());
Picasso.get().load(allPosts.get(position).getFeature_image()).into(holder.postImage);
holder.view.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent i = new Intent(v.getContext(),DetailActivity.class);
i.putExtra("title", allPosts.get(position).getTitle());
i.putExtra("content", allPosts.get(position).getContent());
i.putExtra("featured_media_src_url", allPosts.get(position).getFeature_image());
v.getContext().startActivity(i);
}
});
}
@Override
public int getItemCount() {
return allPosts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView postImage;
TextView postTitle;
View view;
public ViewHolder(@NonNull View itemView){
super(itemView);
view = itemView;
postImage = itemView.findViewById(R.id.post_image);
postTitle = itemView.findViewById(R.id.post_title);
}
}
Jalankan aplikasi anda dan lihat perubahannya seperti pada gambar dibawah:
Pada Folder Res >> Layout >> Klik Kanan >> New >> Layout Resource File >> Beri nama "activity_detail.xml". Buatlah layout seperti gambar dibawah, yang berguna untuk menampilkan detail dari post/artikel wordpress anda.
Buka Project Android Studio Pada folder java >> com >> suba >> wordpress >> Klik Kanan >> New >> Java Class >> Beri nama "DetailActivity.java". Copy kode java dibawah dan paste pada DetailActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
public class DetailActivity extends AppCompatActivity implements Html.ImageGetter {
private TextView contents;
private ImageView imageIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Intent data = getIntent();
String title = data.getStringExtra("title");
String content = data.getStringExtra("content");
String featured_media_src_url = data.getStringExtra("featured_media_src_url");
getSupportActionBar().setTitle(title);
contents = findViewById(R.id.post_content);
contents.setMovementMethod(LinkMovementMethod.getInstance());
Spanned spanned = Html.fromHtml(content, DetailActivity.this, null);
contents.setText(spanned);
imageIv = (ImageView) findViewById(R.id.post_featured_image);
imageIv.setVisibility(View.GONE);
Picasso.get().load(featured_media_src_url).into(imageIv, new Callback() {
@Override
public void onSuccess() {
imageIv.setVisibility(View.VISIBLE);
}
@Override
public void onError(Exception e) {
imageIv.setVisibility(View.VISIBLE);
imageIv.setImageResource(R.drawable.ic_baseline_image_black);
}
});
}
@Override
public Drawable getDrawable(String source) {
LevelListDrawable d = new LevelListDrawable();
Drawable empty = getResources().getDrawable(R.drawable.ic_baseline_image_black);
d.addLevel(0, 0, empty);
d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());
new LoadImage().execute(source, d);
return d;
}
class LoadImage extends AsyncTask<Object, Void, Bitmap> {
private LevelListDrawable mDrawable;
@Override
protected Bitmap doInBackground(Object... params) {
String source = (String) params[0];
mDrawable = (LevelListDrawable) params[1];
try {
InputStream is = new URL(source).openStream();
return BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
BitmapDrawable d = new BitmapDrawable(bitmap);
mDrawable.addLevel(1, 1, d);
mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
mDrawable.setLevel(1);
CharSequence t = contents.getText();
contents.setText(t);
}
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
Dengan Memanfaatkan REST API dari website berbasis wordpress, anda akan dengan mudah membuat aplikasi untuk mobile, baik itu android ataupun ios. Sekian artikel ber-seri dari Membuat Aplikasi Berita Dengan Wordpress dan Android Studio, silahkan kembangkan aplikasi ini dengan menambahkan fitur-fitur lainnya, seperti share, add to favourite, menambahkan Admod hingga mengatur tampilan untuk Dark Mode / Light Mode. Silahkan unduh secara gratis melalui akun github saya. Selamat Malam, selamat Hari Raya Galungan dan Selamat menjalankan Ibadah Puasa.