android开发--HttpUrlConnection

简单实现用get和post方法访问本地服务器
1.androidUI布局activity_main.xml:

这里写代码片<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.min.httpurlconnection.MainActivity" >

    <Button
        android:id="@+id/btn_get"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="get" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="输入姓名" />

        <EditText
            android:id="@+id/et_age"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="输入年龄" />
    </LinearLayout>

    <Button
        android:id="@+id/btn_post"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="post" />

    <TextView
        android:text="ready..."
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

显示如下:
http01

当点击”get” button时,向服务器发出get请求,
2个EditText(“输入姓名”,”输入年龄”)用来当发送post请求时发送给服务器的数据
“post”button用来发送post请求
textview用来显示从服务器发送回来的数据


MainActivity.java代码:

package com.min.httpurlconnection;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    private Button btn_get;
    private Button btn_post;
    private EditText et_name;
    private EditText et_age;
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化控件
        init();
        // btn_get
        btn_get.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getHttp();
            }
        });
        // btn_post
        btn_post.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                postHttp();
            }
        });

    }

    // get请求
    protected void getHttp() {

        // 异步处理
        new AsyncTask<String, Void, String>() {

            @Override
            protected void onPostExecute(String result) {
                // 异步访问完成后查询到的数据显示在主UI线程中的textview中
                tv.setText(result);
                super.onPostExecute(result);
            }

            @Override
            protected String doInBackground(String... params) {
                try {
                    //
                    URL url = new URL(params[0]);
                    HttpURLConnection connection = (HttpURLConnection) url
                            .openConnection();
                    // 输入流,用于读取服务器的数据
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getInputStream(),
                                    "UTF-8"));

                    // 用stringbuffer对象来保存数据
                    StringBuffer sb = new StringBuffer();
                    String line = null;
                    while ((line = br.readLine()) != null) {
                        sb.append(line);

                    }
                    br.close();
                    return sb.toString();

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return null;
            }
            // 访问的服务器地址信息
        }.execute("http://10.0.3.2:8080/MyServer/MyServlet");
    }

    // post请求
    protected void postHttp() {
        new AsyncTask<String, Void, String>() {

            @Override
            protected void onPostExecute(String result) {
                tv.setText(result);
                super.onPostExecute(result);
            }

            @Override
            protected String doInBackground(String... params) {
                try {

                    URL url = new URL(params[0]);
                    HttpURLConnection connection = (HttpURLConnection) url
                            .openConnection();
                    // 设置参数
                    connection.setDoOutput(true);
                    connection.setDoInput(true);
                    connection.setDefaultUseCaches(false);
                    connection.setRequestMethod("POST");

                    // 当既有输入流和输出流时,先写(输出流)后读(输入流)
                    // 1.写数据到服务器
                    // 输出流创建(写)
                    BufferedWriter bw = new BufferedWriter(
                            new OutputStreamWriter(
                                    connection.getOutputStream(), "UTF-8"));

                    // 建jsonobject对象封装上传数据
                    JSONObject jObject = new JSONObject();
                    jObject.put("name", et_name.getText().toString());
                    jObject.put("age", et_age.getText().toString());

                    bw.write(jObject.toString());
                    bw.flush();
                    bw.close();

                    // 2.从服务器读取数据(输入流)
                    // 必须在写操作后创建输入流对象
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getInputStream(),
                                    "UTF-8"));
                    StringBuffer sb = new StringBuffer();
                    String line = null;
                    while ((line = br.readLine()) != null) {
                        sb.append(line);

                    }
                    br.close();
                    return sb.toString();

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                return null;
            }

        }.execute("http://10.0.3.2:8080/MyServer/MyServlet");
    }

    private void init() {
        btn_get = (Button) findViewById(R.id.btn_get);
        btn_post = (Button) findViewById(R.id.btn_post);
        et_name = (EditText) findViewById(R.id.et_name);
        et_age = (EditText) findViewById(R.id.et_age);
        tv = (TextView) findViewById(R.id.tv);
    }

}

记得在manifest.xml中 给予网络访问权限

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

服务器端(servlet):由于处理json数据,需要引入json.jar包哦

“`
package com.min.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONException;
import org.json.JSONObject;

public class MyServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("-----get-------------");
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
    out.println("你发送了get请求到服务器");
    out.flush();
    out.close();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("--------------------post-----------------");
    response.setCharacterEncoding("UTF-8");
    BufferedReader br = new BufferedReader(new InputStreamReader(
            request.getInputStream(), "UTF-8"));
    StringBuffer sb = new StringBuffer();
    String line = null;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }
    try {
        // 解析传来的json数据
        JSONObject jObject = new JSONObject(sb.toString());
        String name = jObject.getString("name");
        String age = jObject.getString("age");
        System.out.println("name=" + name);
        System.out.println("age=" + age);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    br.close();

    PrintWriter out = response.getWriter();
    out.println(sb);
    out.flush();
    out.close();
}

}


效果图:get请求
http02

post请求
http03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓新闻客户端是一种用于安卓系统的应用程序,用于向用户提供最新的新闻资讯。在开发这样的应用程序时,需要使用Java编程语言和Android开发工具包(Android SDK)。 在开发Android新闻客户端时,首先需要进行用户界面的设计和开发。可以使用Android提供的UI控件和布局来创建客户端的不同页面,如新闻列表页面、新闻详情页面等。通过使用RecyclerView来展示新闻列表,并且结合适配器(Adapter)和数据源,可以实现列表的滚动和更新。同时,可以通过点击新闻列表项来打开相应的新闻详情页面。 接下来,需要与后端服务器进行数据交互。在安卓开发中,可以使用HttpURLConnection或者OkHttp等网络库来进行HTTP请求,并从服务器获取新闻数据。通过解析服务器返回的JSON数据,可以提取出新闻的标题、内容、发布时间等信息,并将其呈现给用户。 为了提供更好的用户体验,可以引入一些额外的功能。比如,可以加入搜索功能,让用户能够根据关键词来搜索新闻。还可以加入收藏功能,让用户可以收藏感兴趣的新闻,以便日后查看。此外,还可以使用推送服务(如Firebase Cloud Messaging)来向用户发送新闻推送通知。 最后,在开发完安卓新闻客户端之后,需要进行测试和发布。可以使用Android模拟器或真机进行调试和测试,确保应用程序在各种设备上都能正常运行。然后,可以将应用程序上传至各大应用商店,如Google Play Store,供用户下载和使用。 总之,开发安卓新闻客户端需要进行界面设计和开发、与服务器进行数据交互、添加额外功能,并进行测试和发布等一系列步骤,最终提供给用户一个能够浏览新闻资讯的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值