Android发送http请求连接web端获取数据

1.新建Android项目(我这里用的是AndroidStudio,但是我在学习阶段用的是eclipse,代码都一样)。
2.在AndroidManifest.xml配置添加两个权限就够了,网上很多人配置了很多权限,到后来还不是没用,如果要发http请求,只需配置这两个。
Android发送http请求连接web端获取数据_第1张图片
3.ui界面(activity_main.xml)


4.java类(MainActivity.java)

package tgc.rj.qmkh;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import tgc.rj.qmkh.utils.FilesUtils;

public class MainActivity extends AppCompatActivity {
    private String urlWww="";//这里写你的请求web端的地址,比如http://192.168.1.2:8080/tsgl/android/bookAll
    private String response = "";
    private TextView tv_json;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_json = findViewById(R.id.tv_json);
        String par = "str="+"1323123";
        sendHttp(urlWww, par);//第一个是请求地址。第二个参数传的值。第二个参数如果没有参数,可以不带参数,直接给""
    }

    private void sendHttp(final String urlStr, final String paramStr){
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection conn = null;
                try {
                    URL url = new URL(urlStr);
                    conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestProperty("Charset", "UTF-8");
                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    conn.setRequestMethod("POST");
                    conn.setConnectTimeout(8000);
                    conn.setReadTimeout(8000);
                    String param = paramStr;
                    OutputStream outputStream = conn.getOutputStream();
                    DataOutputStream out = new DataOutputStream(outputStream);
                    out.writeBytes(param);
                    out.flush();
                    out.close();
                    InputStream inputStream = conn.getInputStream();
                    //FilesUtils输入流输出流类(response是响应过来的数据)
                    response = FilesUtils.readInfo(inputStream);
                    runOnUiThread(new Runnable() {
                        public void run() {
                       		 //用runOnUiThread接收输出显示结果
                            tv_json.setText(response);
                        }
                    });
                    if (conn != null) {
                        conn.disconnect();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

5.FilesUtils.java(输入流输出流类)

public class FilesUtils {
    public static void saveInfo(OutputStream outputStream, String wenjian){
        try {
            outputStream.write(wenjian.getBytes());
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String readInfo(InputStream input) {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        try {
            while ((len = input.read(buffer))!=-1) {
                os.write(buffer, 0, len);
            }
            byte[] data = os.toByteArray();
            os.close();
            input.close();
            String str = new String(data);
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

6.web端
请注意我在mainActivity.java中传了一个str=1323123值,下面介绍web端如何接收。
其实跟简单。

@Autowired
private BookService bookService;

@RequestMapping("/bookAll")
@ResponseBody
public Object bookAll(String str) {
	System.out.println("Android端传过来的值:"+str);
	List list = bookService.findAll();
	return list;
}

效果图:
Android发送http请求连接web端获取数据_第2张图片7.在web代码,大家也已经看到了,我返回了一个List去Android端,在Android端MainActivity.java runOnUiThread线程中我也接收了一个reponse,这个reponse就是接收的web端的值,我也用了一个tv_json.setText(reponse);显示在了界面上。请看显示的效果。
Android发送http请求连接web端获取数据_第3张图片
如果是个list,其实就是json数据,需要做处理,如果是普通的字符串,可直接用。

谢谢大家支持。一起学习it行业加v:zzaizhangzeng

你可能感兴趣的:(前端)