Android搭建客户端连接java构建的服务端

原博客地址https://blog.csdn.net/qq_31939617/article/details/79415895

java搭建本地服务器,android客户端访问,tomcat详细步骤


代码都在这里,先可以不用下这个,跟着下面先把环境搭好,出问题再来看代码:

https://download.csdn.net/download/qq_31939617/10275515


eclispe64位,直接解压就可以用

https://pan.baidu.com/s/1nwv1JM5

jdk配置就自行百度吧

Tomcat安装:

1.任意打开一个浏览器,搜索tomcat。在结果列表中打开tomcat官网。

https://tomcat.apache.org/download-80.cgi

往下拉,找到8.0版本的(最好是用为0的版本,6.0/7.0/8.0,刚开始时候装了个8.5.28版本,在后面eclispe配置出现问题了)

2.安装版本的,点击安装

3.选择jre位置(jdk先装了吧)

4.选择安装位置

5.安装完成了

6.安装版有3种启动服务的方法。

一是打开bin目录下的Tomcat8w.exe;

二是计算机——>管理——>服务(管理tomcat的服务);

三是通过任务栏上的tomcat启动图标管理tomcat的启动和暂停

启动成功

7.在浏览器输入:http://localhost:8080/,出现这个页面Tomcat安装就完成了

下面为eclipse配置tomcat

1.打开eclipse--Windows--Preferences,选择

2.选择tomcat版本,我安装的是8.0的

3.选择tomcat,jre路径

创建项目:


1.运行Eclipse,Java EE模式下: File--New--Dynamic Web project
新建Te,


2.项目新建完成,自行导入servlet库(项目属性->Build Path->add Libraries),安装了tomact也有这个。 

都放这了,包括mysql,json的

https://download.csdn.net/download/qq_31939617/10274249

放到lib里面,别忘了右键Buil path--Add to Buil path

2.在src下新䢖abc包,下面新建Test.class

package abc;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;

public class Test extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Map<String,Object> map = new LinkedHashMap<String,Object>();
        map.put("code", "200");
        map.put("msg", "");
        
        Map<String,Object> map1 = new LinkedHashMap<String,Object>();
        map1.put("version", "2.1.0");
        map1.put("describe", "1.优化网络加载速度");
        map.put("data", map1);

        // 无参请求
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        JSONObject obj = JSONObject.fromObject(map);
        out.write(obj.toString());
        return;
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

3.在根目录WEB-INF/web.xml,

配置web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

     <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>abc.Test</servlet-class>
    </servlet> 

    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/abc_test</url-pattern>
    </servlet-mapping>


</web-app>

服务端完成
三,创建android项目
1.创建Test项目:


使用android stduio 创建简单的工程。访问上面创建的servlet,如果是真机,需要改localhost为pc的IP地址。 
别忘了权限:

 <uses-permission  android:name="android.permission.INTERNET"/>
清单文件:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sz.test">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
布局文件:activity_main.xml可以复制:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context="com.example.sz.test.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="测试"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:text="测试"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</LinearLayout>
MainAcitvity.class可以复制:

package com.example.sz.test;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONObject;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    TextView tv;
    Button btn;
    public static final int MSG_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = findViewById(R.id.tv);
        btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                final Map<String, Object> map = new HashMap<>();
                //map.put("mobile", phone);

                String url = "http://192.168.1.194:8080/Te/abc_test";

                HttpClientUtil.postRequestNetwork(url, map, false, new HttpClientUtil.HttpClientCallbackListener() {
                    @Override
                    public void onSuccess(String response) {

                        Log.e(TAG, "onSuccess: -------------" + response);

                        // {"code":"200","msg":"","data":{"version":"2.0.1","describe", "1.优化网络加载速度"}}

                        JSONObject jsonObject1 = null;
                        JSONObject jsonObject2 = null;
                        Log.e(TAG, "onSuccess: --response--" + response);
                        //json解析取出返回值
                        try {

                            jsonObject1 = new JSONObject(response);
                            int code = jsonObject1.getInt("code");

                            jsonObject2 = jsonObject1.getJSONObject("data");

                            String version = jsonObject2.getString("version");
                            String describe = jsonObject2.getString("describe");

                            Message message = new Message();
                            message.what = MSG_CODE;

                            Bundle bundle = new Bundle();
                            bundle.putInt("code", code);
                            bundle.putString("version", version);
                            bundle.putString("describe", describe);
                            message.setData(bundle);
                            mHandler.sendMessage(message);

                        } catch (Exception e) {
                            e.printStackTrace();
                            Log.e(TAG, "onSuccess: --e---" + e);

                        }

                    }

                    @Override
                    public void onFailure(Exception e) {
                        Log.e(TAG, "onFailure: -----e------" + e);

                    }
                });

            }
        });


    }


    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                case MSG_CODE:
                    int code = msg.getData().getInt("code");
                    String version = msg.getData().getString("version");//读出数据
                    String describe = msg.getData().getString("describe");//读出数据

                    if (code == 200) {
                        tv.setText("code:"+code + "version:"+version +"describe:"+ describe);

                    }
                    break;


                default:
                    break;
            }
        }
    };

}


HttpClientUtil.class可以复制:

package com.example.sz.test;

import android.util.Log;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

/**
 * Created by ThinkPad on 2017/8/20.
 * HttpClientUtil工具类
 * lib下导入org.apache.http.legacy.jar
 */

public class HttpClientUtil {
    private static final String TAG = "HttpClientUtil";

    private static String response = "";

    //get请求服务器
    public static void getRequestNetwork(final String urlPath, final HttpClientCallbackListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpGet getMethod = new HttpGet(urlPath);//将URL与参数拼接
                    HttpClient httpClient = new DefaultHttpClient();

                    HttpResponse mHttpResponse = httpClient.execute(getMethod); //发起GET请求
                    int code = mHttpResponse.getStatusLine().getStatusCode();
                    if (code == 200) {
                        response = EntityUtils.toString(mHttpResponse.getEntity(), "utf-8");
                        Log.e(TAG, "getRequestNetwork:---- " + response);

                        if (listener != null) {
                            listener.onSuccess(response.toString());
                        }
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                    if (listener != null) {
                        listener.onFailure(e);
                    }

                }
            }
        }).start();


    }


    /**
     * 通过post请求服务器
     *
     * @param url
     * @param params   参数
     * @param skipNull 是否跳过NULL值,true则不发送value=null的key,否则发送value=
     *                 需要导入lib中的jar包
     */
    public static void postRequestNetwork(final String url, final Map<String, Object> params, final boolean skipNull, final HttpClientCallbackListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                OutputStreamWriter out = null;
                BufferedReader in = null;
                StringBuilder connResult = new StringBuilder("");
                String fullUrl = "";
                try {
                    StringBuilder builder = new StringBuilder();
                    if (null != params && params.size() > 0) {
                        for (String s : params.keySet()) {
                            if (null == params.get(s)) {
                                if (!skipNull) {
                                    builder.append(s).append("=").append("&");
                                }
                                continue;
                            }
                            if (params.get(s) instanceof Iterable<?>) {
                                Iterable<?> ite = (Iterable<?>) params.get(s);
                                for (Object i : ite) {
                                    builder.append(s).append("=").append(i).append("&");
                                }
                            } else {
                                builder.append(s).append("=").append(params.get(s)).append("&");
                            }
                        }
                        builder.delete(builder.length() - 1, builder.length());
                    }
                    fullUrl = url + "?" + builder.toString();
                    //  log.debug(String.format("http request %s", fullUrl));
                    URL destURL = new URL(url);
                    HttpURLConnection urlConn = (HttpURLConnection) destURL.openConnection();
                    urlConn.setConnectTimeout(5000);
                    urlConn.setReadTimeout(40000);
                    urlConn.setDoOutput(true);
                    urlConn.setDoInput(true);
                    urlConn.setAllowUserInteraction(false);
                    urlConn.setUseCaches(false);
                    urlConn.setRequestMethod("POST");
                    OutputStream oups = urlConn.getOutputStream();
                    oups.write(builder.toString().getBytes());
                    urlConn.connect();
                    // 响应编码
                    String contentType = urlConn.getHeaderField("Content-Type");
                    String encode = "UTF-8";
                    int index = -1;
                    if (null != contentType && (index = contentType.indexOf("charset=")) > -1) {
                        encode = contentType.substring(index + 8);
                    }
                    // 返回状态码
                    int state = urlConn.getResponseCode();
                    if (state < 400) {// 返回状态码<400为正确响应
                        in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), encode));
                    } else {
                        in = new BufferedReader(new InputStreamReader(urlConn.getErrorStream(), encode));
                    }
                    String s = null;
                    while ((s = in.readLine()) != null) {
                        connResult.append(s);
                    }
                    // log.debug(String.format("http request %s, response[code:%d, encode:%s, content:%s]", fullUrl, state,
                    // encode, connResult.toString()));

                    if (listener != null) {
                        listener.onSuccess(connResult.toString());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    //  log.error("http request[" + fullUrl + "] error", e);
                    if (listener != null) {
                        listener.onFailure(e);
                    }


                } finally {
                    try {
                        if (out != null) {

                            out.close();
                            if (in != null) {
                                in.close();
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        }).start();
    }

    public interface HttpClientCallbackListener {

        void onSuccess(String response);

        void onFailure(Exception e);

    }

}


记着引入httpClient

真机测试 ,一定要在同一局域网内,要把这个地址换成自己的

成功


代码都在这里:

https://download.csdn.net/download/qq_31939617/10275515
--------------------- 
作者:一点一滴的积累 
来源:CSDN 
原文:https://blog.csdn.net/qq_31939617/article/details/79415895 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值