Android 子线程请求ASP.NET后台

首先定义布局文件,及点击事件

public class MainActivity extends Activity {

    private final int MSG_HELLO = 0;
    private Handler mHandler;

    private Button btnSubmit;
    private EditText txtUsername, txtPassword;
    private TextView loginResult;

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

        btnSubmit = (Button) findViewById(R.id.btnSubmit);
        txtUsername = (EditText) findViewById(R.id.username);
        txtPassword = (EditText) findViewById(R.id.password);
        loginResult = (TextView) findViewById(R.id.loginResult);

        btnSubmit.setOnClickListener(new OnClickLoginListener());
    }

    class OnClickLoginListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            String username = txtUsername.getText().toString();
            String password = txtPassword.getText().toString();
            // 登录请求地址
            String url = "http://172.16.18.10:8080/Home/Login";
            // 参数封装
            Map<String ,String> params = new HashMap<String, String>();
            params.put("username",username);
            params.put("password",password);

            try {
                // 请求登录
                String result = HttpUtils.postRequest(url, params);
                // 讲请求结果转换成 JSON 对象
                JSONObject jsonObject = new JSONObject(result);
                String message = jsonObject.getString("message");
                int status = jsonObject.getInt("status");
                // 登录成功
                if(status == 1)
                {
                    Log.i("Login","登录成功!");
                    Intent it = new Intent(MainActivity.this, MainActivity2.class);

                    Bundle bundle = new Bundle();
                    bundle.putString("name", message+",username:"+ username +" password:"+password);
                    it.putExtras(bundle);       // it.putExtra(“test”, "mobile”);

                   startActivity(it);            // startActivityForResult(it,REQUEST_CODE);
                   finish();
                }
                else
                {
                    loginResult.setText(message);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

HttpUtils

public class HttpUtils {

    /*
     * @function HttpPost 请求
     * @param params 请求参数
     * @return 服务器响应字符串
     * @throws Exception
     */
    public static String postRequest(final String url, final Map<String,String> rawParams ) throws  Exception
    {
        FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                // 创建一个默认的HTTP客户端
                DefaultHttpClient httpClient = new DefaultHttpClient();
                // 创建 HttpPost 对象
                HttpPost post = new HttpPost(url);
                // 如果传递参数个数比较多,可以对传递的参数进行封装
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                for (String key : rawParams.keySet())
                {
                    // 封装请求参数
                    params.add(new BasicNameValuePair(key,rawParams.get(key)));
                }
                // 设置请求参数
                post.setEntity(new UrlEncodedFormEntity(params, "gbk"));
                // 发送 POST 请求
                HttpResponse httpResponse = httpClient.execute(post);
                // 如果服务器成功地返回响应
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
                {
                    String  result = EntityUtils.toString(httpResponse.getEntity());
                    return  result;
                }
                return null;
            }
        });

        new Thread(task).start();
        return task.get();
    }

    /*
     * @function 下载一个图片
     * @param imgPath 图片下载地址
     * @return Bitmap 对象
     * @throws Exception
     */
    public static Bitmap DownloadImage(String imgPath) throws Exception
    {
        Bitmap bitmap = null;
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(imgPath);
        HttpResponse httpResponse = null;
        try {
            httpResponse = httpClient.execute(httpGet);
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                byte[] data = EntityUtils.toByteArray(httpResponse.getEntity());
                // 得到一个Bitmap对象,并且为了使其在post内部可以访问,必须声明为final
                bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                return  bitmap;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}

时间: 2024-08-04 00:29:26

Android 子线程请求ASP.NET后台的相关文章

android子线程中更新UI的方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 参考:Android子线程 方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //

Android子线程更新UI主线程方法之Handler

背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. 下面说下有关Handler相关的知识. 多线程一些基础知识回顾:在介绍Handler类相关知识之前,我们先看看在Java中是如何创建多线程的方法有两种:通过继承Thread类,重写Run方法来实现通过继承接口Runnable实现多线程 具体两者的区别与实现,看看这篇文章中的介绍:http://de

Android子线程真的不能更新UI么

Android单线程模型是这样描述的: Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行 如果在其它线程访问UI线程,Android提供了以下的方式: Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Handler 为什么呢?在子线程中就不能操作UI么? 当一个程序第一次启动的时候,Android会同时启动一个对应的主线程,这个主线程就是UI线程,也

Android子线程更新主界面

学习什么的还是要真正的有应用,有需求才能在最短的时间里面牢牢掌握一项技术. 今天就是这样的,产品一个需求下来,十万火急啊.然后之前只稍稍接触过,只能硬着头皮上了.最后牢牢地掌握了最简单的Handler技术,闲话不多说了! 每一个做android的人都知道,android的内存可谓是存M存金啊!然后我们自然知道,而且Google在设计的时候也充分的考虑到了这一点,所以,我们的UIThread里面一般不做耗时的工作,比如请求网络,比如执行一些比较耗时的逻辑,比如比如加载图片,比如,哦,暂时只碰到过这

Android 子线程测试

private volatile boolean mStopped = false; private int i; TextView tv1; TextView tv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); tv1 = (TextView) findVie

Android:子线程向UI主线程发送消息

在Android里,UI线程是不允许被阻塞的,因此我们要将耗时的工作放到子线程中去处理. 那么子线程耗时处理后要怎样通知UI线程呢? 我们可以在UI主线程中创建一个handler对象,然后通过重写其handleMessage(Message msg)的方法,该方法会接收到子线程中的handler对象的sendMessage((Message msg)发回来的消息.这样一发一收就完成工作: 而关于主线程向子线程发送消息的内容可以看我的上一篇博客,其中讲到了Looper类及其两个重要方法和实现原理.

ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询

js前台对datagrid的定义代码,如下 mygrid = $('#mytable').datagrid({ fit: true, //自动大小 height: 'auto', rownumbers: true, //行号 fitColumns: true, collapsible: true, //是否可折叠的 loadMsg: '数据装载中......', singleSelect: true, //单行选取 pagination: true //显示分页 // columns: [[]]

android 子线程真的不能更新ui吗

在实际的开发中,子线程肯定是不能更新ui的,但是在测试的代码中,我们可以实现子线程中更新ui的功能,例如:一个textview 在oncreate生命周期方法中进行findviewbyid 然后紧接着写一个线程,在线程中直接对这个textview进行settext,你就会发现奇迹竟然就那么发生了,竟然真的更新了ui,而app竟然没有cresh掉,顿时就惊呆了 然后分别尝试在onstart onresume 方法中进行子线程更新ui的操作,竟然都可以更新,但是此时有一个地方需要注意,当我们程序的o

老问题:Android子线程中更新UI的3种方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //完成主界面更新,拿到数据 S