專案實戰:四、判斷有網沒網 並解析資料新增到資料庫
1.這個比較複雜 程式碼比較多發的這個是其中的一個頁面 我就簡單寫一下思路吧 如果要往資料庫裡面新增的話 先建立一個數據庫 然後在Dao層寫增刪改查方法 下面開始寫頁面展示內容 內容太多我也不多說了
public class Fragment01 extends Fragment {
String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
List<JsonBean.DataBean> list = new ArrayList<JsonBean.DataBean>();
private ListView listview;
private MyListViewAdapter adapter;
private Dao dao;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment01, container, false);
//載入元件
listview = view.findViewById(R.id.listview);
//建立Dao物件
dao = new Dao(getActivity());
//介面卡
adapter = new MyListViewAdapter(getActivity(),list);
listview.setAdapter(adapter);
//判斷是否聯網
Boolean resault = NetStateUtil.getResault(getActivity());
//有網
if(resault){
//建立非同步管理類物件,呼叫子執行緒方法,傳送介面
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(urlString);
}else{
Toast.makeText(getActivity(),"當前無網路",Toast.LENGTH_SHORT).show();
}
return view;
}
//非同步管理類
class MyAsyncTask extends AsyncTask<String,Void,String> {
//子執行緒方法,引數為陣列
@Override
protected String doInBackground(String... strings) {
//獲取網路資料
String str = NetUtil.getInter(strings[0]);
//返回給主執行緒方法
return str;
}
//UI主執行緒方法
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//解析
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
List<JsonBean.DataBean> data = jsonBean.getData();
//將解析出來的集合新增到自己的集合中
Log.i("zcq", "解析集合資料: "+data.toString());
list.addAll(data);
//新增到資料庫
for (int i=0;i<list.size();i++){
ContentValues values = new ContentValues();
values.put("news_title",list.get(i).getNews_title());
values.put("news_summary",list.get(i).getNews_summary());
values.put("pic_url",list.get(i).getPic_url());
long add = dao.add("news", null, values);
if(add>0){
Log.i("zcq", "新增資料庫成功: "+add);
}
}
//重新整理介面卡
adapter.notifyDataSetChanged();
}
}
}
2.
這個是網路解析資料
public class NetUtil {
public static String getInter(String string) {
try {
//網路解析資料
URL url = new URL(string);
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int responseCode = connection.getResponseCode();
if(responseCode==200){
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
String read = "";
String str = "";
while((read=reader.readLine())!=null){
str+=read;
}
return str;
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
3.
網路圖片展示到列表上
public class MApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader instance = ImageLoader.getInstance();
instance.init(configuration);
}
}
4.
這個是列表展示和網路請求圖片的介面卡
public class MyListViewAdapter extends BaseAdapter {
private Activity context;
private List<JsonBean.DataBean> list;
private ViewHolder holder;
public MyListViewAdapter(Activity context, List<JsonBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {`在這裡插入程式碼片`
return list.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view==null){
view= View.inflate(context, R.layout.listview, null);
holder = new ViewHolder();
holder.listview_title = view.findViewById(R.id.listview_title);
holder.listview_img = view.findViewById(R.id.listview_img);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
JsonBean.DataBean dataBean = list.get(i);
holder.listview_title.setText(dataBean.getNews_title());
ImageLoader instance = ImageLoader.getInstance();
instance.displayImage(dataBean.getPic_url(),holder.listview_img);
return view;
}
class ViewHolder{
private TextView listview_title;
private ImageView listview_img;
}
}