Android Studio的代码笔记--请求数据、解析JSON数据、适配器展示


以HttpURLConnection请求网站数据,JSON解析,ListAdapter展示
在这里插入图片描述

新建class

News

public class News {
    String title;
    String mtime;
    String url;
    public News(){}
    public News(String title, String mtime, String url) {
        this.title = title;
        this.mtime = mtime;
        this.url = url;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getMtime() {
        return mtime;
    }
    public void setMtime(String mtime) {
        this.mtime = mtime;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
}

NewsJson

public class NewsJson {
    public static List<News> getNews(String newsJson){
        List<News> Data=new ArrayList<News>();
        try {
            JSONObject jso = new JSONObject(newsJson);
            JSONArray newslist =jso.getJSONArray("T1348647853363");
            for(int i=0;i<newslist.length();i++){
                JSONObject jsd = newslist.getJSONObject(i);
                News news =new News(jsd.getString("title"),jsd.getString("mtime"),jsd.getString("url"));
                Data.add(news);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return Data;
    }
}

HttpclientClass

public class HttpclientClass {
    public static String getDataString(String urlPath){
        String datastring ="";
        //1.创造HttpClient对象
        HttpClient httpClient = new DefaultHttpClient();
        //2.创造HttpGet请求对象(访问的服务器地址)
        HttpGet httpGet = new HttpGet(urlPath);
        //3.执行请求,服务器响应结果放在请求对象中
        try {
            HttpResponse response = httpClient.execute(httpGet);
            //4.根据状态码判断请求结果,200表示正常
            if(response.getStatusLine().getStatusCode()==200){
                //5.取出entity里的数据
                HttpEntity entity = response.getEntity();
                String result = EntityUtils.toString(entity,"utf-8");
                datastring=result;
                Log.i("LXH", "result: "+result );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return datastring;
    }
}

HttpURLconnectionClass

public class HttpURLconnectionClass {
    public static String getData(String urlpath){
        String data="";
        try {
            URL url=new URL(urlpath);
            URLConnection conn=url.openConnection();
            HttpURLConnection httpConn =(HttpURLConnection) conn;
            int responseCode =httpConn.getResponseCode();
            if (responseCode==200){
                InputStream is =httpConn.getInputStream();
                data = StreamtoString(is);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
    public static String StreamtoString(InputStream is){
        String str="";
        StringBuilder builder =new StringBuilder();
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(is,"UTF-8"));
            String con;
            while ((con=br.readLine())!=null){
                builder.append(con);
            }
            br.close();
            return builder.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

NewsAdapter

public class NewsAdapter extends BaseAdapter {
    Context context;
    List<News> list;
    LayoutInflater mInflater;
    public NewsAdapter(Context context, List<News> list) {
        this.context = context;
        this.list = list;
        mInflater =LayoutInflater.from(context);
    }
    public List<News> getList() {
        return list;
    }
    @Override
    public int getCount(){
        return list.size();
    }
    @Override
    public Object getItem(int i){
        return list.get(i);
    }
    @Override
    public long getItemId(int i){
        return i;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup){
        View layout =mInflater.inflate(R.layout.newshow,null);
        TextView title=layout.findViewById(R.id.tvNewTitle);
        TextView data=layout.findViewById(R.id.tvNewData);
        title.setText(list.get(i).getTitle());
        data.setText(list.get(i).getMtime());
        return layout;
    }
}

NewsAdapter

public class NewsAdapter extends BaseAdapter {
    Context context;
    List<News> list;
    LayoutInflater mInflater;
    public NewsAdapter(Context context, List<News> list) {
        this.context = context;
        this.list = list;
        mInflater =LayoutInflater.from(context);
    }
    public List<News> getList() {
        return list;
    }
    @Override
    public int getCount(){
        return list.size();
    }
    @Override
    public Object getItem(int i){
        return list.get(i);
    }
    @Override
    public long getItemId(int i){
        return i;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup){
        View layout =mInflater.inflate(R.layout.newshow,null);
        TextView title=layout.findViewById(R.id.tvNewTitle);
        TextView data=layout.findViewById(R.id.tvNewData);
        title.setText(list.get(i).getTitle());
        data.setText(list.get(i).getMtime());
        return layout;
    }
}

新建Activity

Main22Activity :用Httpclient获取数据+JSON解析

public class Main22Activity extends AppCompatActivity {
    ListView lvNew;
    List<News> data;
    Handler handler;
    String netdata;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
        lvNew=findViewById(R.id.lvNew);
        handler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                //处理消息
                if(msg.what==1){
                    data = NewsJson.getNews((String)msg.obj);
                    if(data==null){
                        return;
                    }
                    NewsAdapter adapter = new NewsAdapter(getApplicationContext(),data);
                    lvNew.setAdapter(adapter);
                }
            }
        };
        lvNew.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String url =data.get(i).getUrl();
                if (url!=null&&url.length()!=0){
                    Toast.makeText(getApplicationContext(),url, Toast.LENGTH_LONG).show();
                    Uri uri = Uri.parse(url);
                    try {
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else {
                    Toast.makeText(getApplicationContext(),"url=空",Toast.LENGTH_LONG).show();
                }
            }
        });
        new Thread(){
            @Override
            public void run() {
                super.run();
                netdata=HttpclientClass.getDataString("http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html");
                Log.i("netdata","access"+netdata);
                Message msg =Message.obtain();
                msg.what=1;
                msg.obj=netdata;
                handler.sendMessage(msg);
            }
        }.start();
    }
}

Main33Activity :用HttpURLconnection获取数据

public class Main33Activity extends AppCompatActivity {
    TextView tvHttpClient;
    Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main3);
        tvHttpClient=findViewById(R.id.tvHttpClient);
        handler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                //处理消息
                if(msg.what==1){
                    String response=(String)msg.obj;
                    tvHttpClient.setText(response);
                }
            }
        };
        new Thread(){
            @Override
            public void run() {
                super.run();
                String netdata="";
                netdata=HttpURLconnectionClass.getData("http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html");
                Log.i("LXH","access"+netdata);
                Message msg =Message.obtain();
                msg.what=1;
                msg.obj=netdata;
                handler.sendMessage(msg);
            }
        }.start();
    }
}

Main44Activity :用HttpURLconnection获取数据+JSON解析

public class Main44Activity extends AppCompatActivity {
    ListView lvNew;
    List<News> data;
    Handler handler;
    String netdata;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news);
        lvNew=findViewById(R.id.lvNew);
        handler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                if(msg.what==1){
                    data = NewsJson.getNews((String)msg.obj);
                    if(data==null){
                        return;
                    }
                    NewsAdapter adapter = new NewsAdapter(getApplicationContext(),data);
                    lvNew.setAdapter(adapter);
                }
            }
        };
        lvNew.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String url =data.get(i).getUrl();
                if (url!=null&&url.length()!=0){
                    Toast.makeText(getApplicationContext(),url, Toast.LENGTH_LONG).show();
                    Uri uri = Uri.parse(url);
                    try {
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else {
                    Toast.makeText(getApplicationContext(),"url=空",Toast.LENGTH_LONG).show();
                }
            }
        });
        new Thread(){
            @Override
            public void run() {
                super.run();
                netdata=HttpURLconnectionClass.getData("http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html");
                Log.i("netdata","access"+netdata);
                Message msg =Message.obtain();
                msg.what=1;
                msg.obj=netdata;
                handler.sendMessage(msg);
            }
        }.start();
    }
}

MainActivity :用Httpclient获取数据

public class MainActivity extends AppCompatActivity {
    Button button1;
    Button button2;Button button3;Button button4;
    TextView textView1;
    Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView1 = findViewById(R.id.TextView1);
        button1 = findViewById(R.id.button1);
        button2 = findViewById(R.id.button2);
        button3 = findViewById(R.id.button3);
        button4 = findViewById(R.id.button4);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this, Main22Activity.class);
                startActivity(intent);
            }
        });
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this, Main33Activity.class);
                startActivity(intent);
            }
        });
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this, Main44Activity.class);
                startActivity(intent);
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RunThread();
            }
        });
        handler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                if(msg.what==1){
                    String response=(String)msg.obj;
                    textView1.setText(response);
                }
            }
        };
    }
    private void RunThread(){
        new Thread(){
            @Override
            public void run() {
                super.run();
                String netdata="";
                netdata=HttpclientClass.getDataString("http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html");
                Log.i("LXH","access"+netdata);
                Message msg =Message.obtain();
                msg.what=1;
                msg.obj=netdata;
                handler.sendMessage(msg);
            }
        }.start();
    }
}

XML

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HttpClient的GET" />
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HttpClient+JSON" />
    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HttpURLConnection的GET" />
    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HttpURLConnection+JSON" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/TextView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="" />
    </ScrollView>
</LinearLayout>

main3.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <TextView
            android:id="@+id/tvHttpClient"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="" />
    </ScrollView>
</LinearLayout>

news.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/lvNew"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

newshow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tvNewTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
    <TextView
        android:id="@+id/tvNewData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

添加权限

useLibrary 'org.apache.http.legacy'

在这里插入图片描述

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

在这里插入图片描述

成果

在这里插入图片描述
在这里插入图片描述
有需要项目: link.也可以私信邮箱我看到就发
欢迎指错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值