xutils解析网络数据

来源:互联网 发布:sql distinct 去重求和 编辑:程序博客网 时间:2024/04/27 21:05




首选需要导入的是Xutils和Gosn包


compile 'com.google.code.gson:gson:2.8.0'compile 'org.xutils:xutils:3.5.0'


还有就是权限,因为我们需要从网上获取数据,所以一定不要忘了INTERNET。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".MyApplication"



接下来就是布局了,main_activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="demo.com.xutilsdemo.MainActivity"><ListView    android:id="@+id/lv"    android:layout_width="match_parent"    android:layout_height="wrap_content"    /></RelativeLayout>



需要展示的文字和图片,这个是自己设置的,想展示什么效果自己设置。取名item吧

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/news_title"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="2"        />    <ImageView        android:id="@+id/pic_url"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="1"/></LinearLayout>



现在就是Class类了,因为因为我们用到了xutils,必须写这个类来设置一下吧。取名APPliction

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        x.Ext.init(this);        x.Ext.setDebug(BuildConfig.DEBUG);    }}




主Actiicity类了,下面让代码来说话吧。

public class MainActivity extends AppCompatActivity {    //封装的属性    private ListView lv;    private List<Data.DataBean> list = new ArrayList<>();    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件        initView();        //xutils的网络请求        initLoad();    }    /**     * 获取的网络数据,通过Gson来解析     */    private void initLoad() {        RequestParams params = new RequestParams("http://api.expoon.com/AppNews/getNewsList/type/1/p/2");        x.http().get(params, new Callback.CommonCallback<String>() {            @Override            public void onSuccess(String result) {                Gson gson = new Gson();                Data data = gson.fromJson(result, Data.class);                list.addAll(data.getData());                adapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable ex, boolean isOnCallback) {            }            @Override            public void onCancelled(CancelledException cex) {            }            @Override            public void onFinished() {            }        });    }    /**     * 把获取的数据在List上面展示     */    private void initView() {        lv = (ListView) findViewById(R.id.lv);        adapter = new MyAdapter();        lv.setAdapter(adapter);    }    /**     * 适配器,给Listview展示数据,做下优化。     */    class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return list == null ? 0 : list.size();        }        @Override        public Object 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 = null;            if (convertView == null) {                convertView = View.inflate(MainActivity.this, R.layout.item, null);                holder = new ViewHolder();                holder.news_title = (TextView) convertView.findViewById(R.id.news_title);                holder.pic_url = (ImageView) convertView.findViewById(R.id.pic_url);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.news_title.setText(list.get(position).getNews_title());            x.image().bind(holder.pic_url, list.get(position).getPic_url());            return convertView;        }    }    class ViewHolder {        TextView news_title;        ImageView pic_url;    }}