网络请求数据保存到数据库_在Fragment中Listview展示

一.首先创建三个Fragment******************
二.maintivity中用viewpager中存入Fragment*******************
package com.example.day4.ui.activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import com.example.day4.ui.fragment.BlankFragment;
import com.example.day4.ui.fragment.HomeFragment;
import com.example.day4.R;
public class Main2Activity extends AppCompatActivity {
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
pager.setCurrentItem(0);
return true;
case R.id.navigation_video:
pager.setCurrentItem(1);
return true;
case R.id.navigation_mine:
pager.setCurrentItem(2);
return true;
}
return false;
}
};
private BottomNavigationView navigation;
private ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
pager = findViewById(R.id.pagers);
pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new HomeFragment();
case 1:
return new BlankFragment();
case 2:
return new BlankFragment();
}
return null;
}

        @Override
        public int getCount() {
            return 3;
        }
    });

    navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {//页面滑动的时候回调
        }
        @Override
        public void onPageSelected(int i) {//页面选中时回调
            switch (i) {
                case 0:
                    navigation.setSelectedItemId(R.id.navigation_home);
                    break;
                case 1:
                    navigation.setSelectedItemId(R.id.navigation_video);
                    break;
                case 2:
                    navigation.setSelectedItemId(R.id.navigation_mine);
                    break;
            }
        }
        @Override
        public void onPageScrollStateChanged(int i) {//页面状态改变
        }
    });
}

}

三.Listview 适配器*****************************

package com.example.day4.ui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.day4.R;
import com.example.day4.model.NewsResponse;

import java.util.ArrayList;
import java.util.List;

public class NewsAdapter extends BaseAdapter {
private Context context;
private List<NewsResponse.Data> datas;

public NewsAdapter(Context context) {
    this.context = context;
    datas = new ArrayList<>();
}

public void setDatas(List<NewsResponse.Data> datas) {
    //this.datas.clear();
    this.datas.addAll(datas);
    notifyDataSetChanged();
}

public void delData(int position) {
    datas.remove(position);
    notifyDataSetChanged();
}

public void addData(NewsResponse.Data data) {
    datas.add(data);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return datas.size();
}

@Override
public NewsResponse.Data getItem(int position) {
    return datas.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if(convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        viewHolder = new ViewHolder(convertView);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.bindData(getItem(position));

    return convertView;
}

class ViewHolder {
    TextView title;
    TextView summary;

    public ViewHolder(View itemView) {
        title = itemView.findViewById(R.id.title);
        summary = itemView.findViewById(R.id.summary);
        itemView.setTag(this);
    }

    public void bindData(NewsResponse.Data data) {
        title.setText(data.getNews_title());
        summary.setText(data.getNews_summary());
    }
}

}

四.在第一个Fragment中Listview展示***********************

package com.example.day4.ui.fragment;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
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.day4.R;
import com.example.day4.db.NewsDao;
import com.example.day4.model.NewsResponse;
import com.example.day4.ui.adapter.NewsAdapter;
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.URL;
import java.util.List;

import static android.provider.ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;

public class HomeFragment extends Fragment {

private ListView news;
private NewsAdapter adapter;
private NewsDao newsDa o;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    newsDao = new NewsDao(getActivity());
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_home, container, false);
}

private String apiUrl = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    news = view.findViewById(R.id.news);
    adapter = new NewsAdapter(getActivity());
    news.setAdapter(adapter);

    news.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            newsDao.del(adapter.getItem(position).getNews_id());
            adapter.delData(position);
            return true;
        }
    });

    initData();
}

@SuppressLint("StaticFieldLeak")
private void initData() {

    if(!hasNetwork()) {
        List<NewsResponse.Data> result = newsDao.query();
        adapter.setDatas(result);
        return ;
    }
    //集合更好。
    new AsyncTask<String, Void, List<NewsResponse.Data>>() {
        @Override
        protected List<NewsResponse.Data> doInBackground(String... strings) {//
            NewsResponse result = null;
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                if (isMobileNetwork()) {
                    urlConnection.setConnectTimeout(15000);
                    urlConnection.setReadTimeout(15000);
                } else {
                    urlConnection.setConnectTimeout(5000);
                    urlConnection.setReadTimeout(5000);
                }
                int responseCode = urlConnection.getResponseCode();
                if (responseCode == 200) {
                    String strResult = stream2String(urlConnection.getInputStream());
                    result = new Gson().fromJson(strResult, NewsResponse.class);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //网络请求成功,解析成功,服务端返回成功
            if(result != null && result.isSuccess()) {
                newsDao.addAll(result.getData());
                return result.getData();
            }
            return null;
        }

        @Override
        protected void onPostExecute(List<NewsResponse.Data> data) {
            if(data != null) {
                adapter.setDatas(data);
            } else {
                Toast.makeText(getActivity(), "请求失败", Toast.LENGTH_SHORT).show();
            }
        }
    }.execute(apiUrl);
}

//是否是手机网络
private boolean isMobileNetwork() {
    ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.getType() == TYPE_MOBILE;
}

private boolean hasNetwork() {
    ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isAvailable();
}

private String stream2String(InputStream inputStream) throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    InputStreamReader isr = new InputStreamReader(inputStream);
    BufferedReader br = new BufferedReader(isr);
    for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
        stringBuilder.append(tmp);
    }
    return stringBuilder.toString();
}

}

***********创建数据库
package com.example.day4.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

private static final String DB_NAME = "news.db";
private static final int DB_VERSION = 1;

public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE news (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "title TEXT," +
            "summary TEXT," +
            "id TEXT UNIQUE)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

**********数据库dao层

package com.example.day4.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.day4.model.NewsResponse;

import java.util.ArrayList;
import java.util.List;

public class NewsDao {

private SQLiteDatabase db;

public NewsDao(Context context) {
    db = new DBHelper(context).getWritableDatabase();
}

public List<NewsResponse.Data> query() {
    List<NewsResponse.Data> result = new ArrayList<>();
    Cursor cursor = db.query("news",
            null, null, null, null, null, null);

    if (cursor != null) {
        while (cursor.moveToNext()) {
            String id = cursor.getString(cursor.getColumnIndex("id"));
            String title = cursor.getString(cursor.getColumnIndex("title"));
            String summary = cursor.getString(cursor.getColumnIndex("summary"));
            result.add(new NewsResponse.Data(id, title, summary));
        }
        cursor.close();
    }

    return result;
}

public void add(NewsResponse.Data data) {
    ContentValues values = new ContentValues();
    values.put("id", data.getNews_id());
    values.put("title", data.getNews_title());
    values.put("summary", data.getNews_summary());
    db.insert("news", null, values);
}

public void addAll(List<NewsResponse.Data> datas) {
    for (NewsResponse.Data data : datas) {
        add(data);
    }
}  

public void del(String id) {
    db.delete("news", "id=?", new String[]{id});
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值