网络中获取json数据

今天来叫大家做一个从网络中获取json数据的小程序,因为代码量较大,所以本人就有点懒了(@_@)!!!

先来看一下本程序的框架构成!
程序结构图

下面开始代码的实现:
首先是主页面:
【activity_main.java】:

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="八维新闻" 
        android:gravity="center"
        />

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_below="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </android.support.v4.view.ViewPager>

【MainActivity.java】:

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

import com.example.weekoneex.fragment.FragmentOne;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;


public class MainActivity extends FragmentActivity {

    ViewPager vp;
    List<Fragment> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        vp = (ViewPager) findViewById(R.id.vp);
        initData();
        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
        vp.setAdapter(adapter);
    }

    private void initData() {
        list = new ArrayList<Fragment>();
        list.add(new FragmentOne());
    }

    class MyPagerAdapter extends FragmentPagerAdapter{

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }

        @Override
        public Fragment getItem(int arg0) {
            // TODO Auto-generated method stub
            return list.get(arg0);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

    }

}

【bean包/News.java】:

public class News {
    String title;
    String content;
    String news;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getNews() {
        return news;
    }
    public void setNews(String news) {
        this.news = news;
    }
    @Override
    public String toString() {
        return "News [title=" + title + ", content=" + content + ", news="
                + news + "]";
    }


}

【Bean包/NewsData.java】:

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

public class NewsData {
    String result;
    int code;
    List<News> newsList = new ArrayList<News>();
    @Override
    public String toString() {
        return "NewsData [result=" + result + ", code=" + code + ", newsList="
                + newsList + "]";
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public List<News> getNewsList() {
        return newsList;
    }
    public void setNewsList(List<News> newsList) {
        this.newsList = newsList;
    }


}

【fragment包/FragmentOne.java】:

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import com.example.weekoneex.R;
import com.example.weekoneex.bean.NewsData;
import com.google.gson.Gson;

import android.os.AsyncTask;
import android.os.Bundle;
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.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class FragmentOne extends Fragment{
    ListView lv;
    NewsData data;
    MyAdapter adapter;
    @Override
    @Nullable
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.frag_one, null);

        lv = (ListView) view.findViewById(R.id.lv);
        adapter = new MyAdapter();
        initData();

        return view;
    }
    private void initData() {
        new AsyncTask<String, String, String>() {

            @Override
            protected String doInBackground(String... params) {
                return getData();
            }

            @Override
            protected void onPostExecute(String result) {
                //解析Json
                Gson gson = new Gson();
                data = gson.fromJson(result, NewsData.class);
                //设置ListView的显示
                lv.setAdapter(adapter);
                super.onPostExecute(result);
            }

        }.execute();
    }

    class MyAdapter extends BaseAdapter{

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

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null){
                convertView = View.inflate(getActivity(), R.layout.list_item, null);
                holder = new ViewHolder();
                holder.title = (TextView) convertView.findViewById(R.id.item_title);
                holder.content = (TextView) convertView.findViewById(R.id.item_content);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }
            holder.title.setText(data.getNewsList().get(position).getTitle());
            holder.content.setText(data.getNewsList().get(position).getContent());
            return convertView;
        }

    }

    static class ViewHolder{
        TextView title;
        TextView content;
    }

    protected String getData() {
        String result = "";
        try {
            URL url = new URL("http://169.254.122.215:8080/news/news.json");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            int code = connection.getResponseCode();
            if(code == 200){
                //使用输入流获取到请求数据
                InputStream is = connection.getInputStream();
                ByteArrayOutputStream bos = new ByteArrayOutputStream();

                int len = -1;
                byte[] buff = new byte[1024];
                while((len = is.read(buff)) != -1){
                    bos.write(buff,0,len);
                }
                //不管是在什么位置  是要是从字节变成字符  肯定会有一个设置编码的参数
                result = new String(bos.toByteArray(), "GBK");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }
}

fragment布局文件:

<ListView 
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ListView>

list_item布局:

    <TextView 
        android:id="@+id/item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        />

    <TextView 
        android:id="@+id/item_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        />

最终效果图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值