AsyncTask+gson資料展示+資料庫+網路判斷+點選刪除
阿新 • • 發佈:2018-12-08
**
MainActivity頁面
**
package com.example.lx_zk1.activity; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.example.lx_zk1.R; import com.example.lx_zk1.adapter.TabAdapter; public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TabLayout tabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取資源ID viewPager = findViewById(R.id.viewpager); tabLayout = findViewById(R.id.tab); //設定介面卡 TabAdapter adapter = new TabAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); //根據viewpager設定tab tabLayout.setupWithViewPager(viewPager); } }
**
TabLayout和ViewPager的介面卡頁面
**
package com.example.lx_zk1.adapter; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import com.example.lx_zk1.fragment.SFragment; import com.example.lx_zk1.fragment.WFragment; public class TabAdapter extends FragmentPagerAdapter { //建立一個string集合 private String[] menus = new String[]{ "首頁","視訊","我的" }; public TabAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position){ case 0: return new SFragment(); default: return new WFragment(); } } @Nullable @Override public CharSequence getPageTitle(int position) { return menus[position]; } @Override public int getCount() { return menus.length; } }
**
首頁頁面 SFragment
**
package com.example.lx_zk1.fragment; import android.annotation.SuppressLint; import android.os.AsyncTask; 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 android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.example.lx_zk1.R; import com.example.lx_zk1.adapter.UserAdapter; import com.example.lx_zk1.bean.Bean; import com.example.lx_zk1.sql.Dao; import com.example.lx_zk1.util.NetUtil; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.List; public class SFragment extends Fragment { private ListView listView; private UserAdapter adapter; private List<Bean.DataBean> list; private Dao dao; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.sfragment,container,false); return view; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //獲取資源id listView = view.findViewById(R.id.listview); //設定介面卡 adapter = new UserAdapter(getActivity()); listView.setAdapter(adapter); dao = new Dao(getActivity()); initData(); //長按刪除 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { dao.del(adapter.getItem(position).getNews_title()); adapter.delData(position); return true; } }); } private String urlstr = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; private void initData(){ if (!NetUtil.getInstance().panduan(getContext())){ Toast.makeText(getContext(),"網路錯誤",Toast.LENGTH_SHORT).show(); return; }else { NetUtil.getInstance().RequestData(urlstr, Bean.class, new NetUtil.CaLLBack<Bean>() { @Override public void onSuccess(Bean bean) { //寫入資料到資料庫 dao.addAll(bean.getData()); //展示資料到列表 adapter.setList(bean.getData()); } }); } } }
**
Bean類
**
package com.example.lx_zk1.bean;
import java.util.List;
public class Bean {
private List<DataBean> data;
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean{
private String news_summary;
private String news_title;
private String pic_url;
public DataBean(String news_title, String pic_url) {
this.news_title = news_title;
this.pic_url = pic_url;
}
public String getNews_summary() {
return news_summary;
}
public void setNews_summary(String news_summary) {
this.news_summary = news_summary;
}
public String getNews_title() {
return news_title;
}
public void setNews_title(String news_title) {
this.news_title = news_title;
}
public String getPic_url() {
return pic_url;
}
public void setPic_url(String pic_url) {
this.pic_url = pic_url;
}
}
}
**
ListView的Adapter
**
package com.example.lx_zk1.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.lx_zk1.R;
import com.example.lx_zk1.bean.Bean;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
public class UserAdapter extends BaseAdapter {
private List<Bean.DataBean> list;
private Context context;
public UserAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<Bean.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
public void addList(List<Bean.DataBean> slist){
list.addAll(slist);
notifyDataSetChanged();
}
public void delData(int position){
list.remove(position);
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Bean.DataBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.item,parent,false);
holder = new ViewHolder();
holder.imageView = convertView.findViewById(R.id.imageview);
holder.textView = convertView.findViewById(R.id.textview);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(getItem(position).getNews_title());
ImageLoader.getInstance().displayImage(getItem(position).getPic_url(),holder.imageView);
return convertView;
}
class ViewHolder{
private TextView textView;
private ImageView imageView;
}
}
NetUtil頁面 介面回撥
package com.example.lx_zk1.util;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class NetUtil {
private static NetUtil instance;
public NetUtil(){
}
public static NetUtil getInstance(){
if (instance==null){
instance = new NetUtil();
}
return instance;
}
//判斷網路狀態
public static boolean panduan(Context context){
//建立連線管理器
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//獲取最新流動狀態
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
}
//建立介面
public static interface CaLLBack<T>{
void onSuccess(T t);
}
//非同步請求
public static void RequestData(final String str, final Class clazz, final CaLLBack caLLBack){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return RequestData(str,clazz);
}
@Override
protected void onPostExecute(Object o) {
caLLBack.onSuccess(o);
}
}.execute(str);
}
//網路解析
public static <T> T RequestData(String str, Class clazz){
T t = (T) new Gson().fromJson(RequestData(str), clazz);
return t;
}
//網路請求
public static String RequestData(String str){
String result = "";
try {
URL url = new URL(str);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode==200){
result = stream2String(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static String stream2String(InputStream inputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String tmp = bufferedReader.readLine(); tmp != null; tmp = bufferedReader.readLine()){
stringBuilder.append(tmp);
}
return stringBuilder.toString();
}
}
App頁面
package com.example.lx_zk1.util;
import android.app.Application;
import android.graphics.Bitmap;
import com.example.lx_zk1.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheSize(10)
.diskCacheSize(10*1024*1024)
.defaultDisplayImageOptions(new DisplayImageOptions.Builder()
.bitmapConfig(Bitmap.Config.RGB_565)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.cacheOnDisk(true)
.cacheInMemory(true)
.build()
).build();
ImageLoader.getInstance().init(configuration);
}
}
**
SqliteHelper頁面 建立資料庫的表
**
package com.example.lx_zk1.sql;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;
public class SqliteHelper extends SQLiteOpenHelper {
public SqliteHelper(@Nullable Context context) {
super(context, "User.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table miss(id integer primary key autoincrement," +
"title text," +
"url text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
**
Dao層
**
package com.example.lx_zk1.sql;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.lx_zk1.bean.Bean;
import com.nostra13.universalimageloader.utils.L;
import java.util.ArrayList;
import java.util.List;
public class Dao {
private SQLiteDatabase database;
public Dao(Context context){
database = new SqliteHelper(context).getWritableDatabase();
}
//新增
public void add(Bean.DataBean data){
ContentValues values = new ContentValues();
values.put("title",data.getNews_title());
values.put("url",data.getPic_url());
database.insert("miss",null,values);
}
public void addAll(List<Bean.DataBean> list){
for (Bean.DataBean bean : list){
add(bean);
}
}
//刪除
public void del(String title){
database.delete("miss","title=?",new String[]{title});
}
//查詢
public List<Bean.DataBean> query(){
List<Bean.DataBean> list = new ArrayList<>();
Cursor query = database.query("miss", null, null, null, null, null, null);
while (query.moveToNext()){
String title = query.getString(query.getColumnIndex("title"));
String url = query.getString(query.getColumnIndex("url"));
Bean.DataBean bean = new Bean.DataBean(title,url);
list.add(bean);
}
return list;
}
}