Android 发送网络请求(GET)

这里模仿登录,实现一个简单的GET请求

public class MainActivity extends AppCompatActivity {
    private static final int ERROR = 0;
    private static final int SUCCESS = 1;
    private EditText ed_username;
    private EditText ed_password;
    private String username;
    private String password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取账号和密码输入控件
        ed_username = (EditText) findViewById(R.id.ed_username);
        ed_password = (EditText) findViewById(R.id.ed_password);
    }

    Handler handler = new Handler(){
        @Override
        //后面handler.sendMessage() 所发送过来的消息,都会在这被处理
        public void handleMessage(Message msg) {
            switch (msg.what){
                case SUCCESS:
                //请求发送成功,会将服务器返回的信息通过Toast显示给用户
                    Toast.makeText(MainActivity.this, (String)msg.obj, Toast.LENGTH_SHORT).show();
                    break;
                case ERROR:
                    Toast.makeText(MainActivity.this, "出错了", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
        }
    };
    public void login(View v){
    //获取输入的账号和密码
        username = ed_username.getText().toString().trim();
        password = ed_password.getText().toString().trim();
        if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){
            Toast.makeText(this, "账号或密码不能为空!", Toast.LENGTH_SHORT).show();
        }
    //发送网络请求,这步需要在子线程中完成
        new Thread(){
            public void run() {
                try {
            //请求的地址
                    String path = "http://192.168.1.105:80/index.php";
                    //如果账号是中文需要进行编码
                    username = URLEncoder.encode(username, "UTF-8");
                    path = path + "?username=" + username + "&password=" + password;
                    URL url = new URL(path);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    //设置请求方式
                    con.setRequestMethod("GET");
                    //设置请求超时时间
                    con.setConnectTimeout(5000);
                    //获取响应的状态码
                    final int code = con.getResponseCode();
                    if(code == 200){
                    //获取服务器返回的流数据
                        InputStream in = con.getInputStream();
                        //解码流数据,转换成字符串,这个StreamTools是自己定义的
                        String value = StreamTools.decodeStream(in);
                        //获取一个消息对象
                        Message msg = Message.obtain();
                        //设置状态为SUCCESS,表示请求成功,这个是自己定义的
                        msg.what = SUCCESS;
                        //将服务器数据赋值给消息中的一个Object对象
                        msg.obj = value;
                        //发送消息,交给handler 去处理数据,并将结果返回给用户
                        handler.sendMessage(msg);
                    }else{
                    //表示请求失败
                        Message msg = Message.obtain();
                        msg.what = ERROR;
                        handler.sendMessage(msg);
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

解析流数据的工具类

public class StreamTools {
    public static String decodeStream(InputStream in) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int len = 0;
        byte[] buf = new byte[1024];
        while ( (len = in.read(buf)) > 0 ){
            baos.write(buf, 0, len);
        }
        baos.close();
        return baos.toString();
    }
}

android App 要想发送网络请求还需要在mainsfest中添加这一行,表示允许app使用网络

 <uses-permission android:name="android.permission.INTERNET" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值