Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android API 14-网络操作/异步任务_Android_Sdk - Fatal编程技术网

Android API 14-网络操作/异步任务

Android API 14-网络操作/异步任务,android,sdk,Android,Sdk,最近,我提出了一个关于使用POST数据执行HTTP请求的问题(在这里找到:),我被告知需要尝试类似AsyncTask的操作,因为我无法在主线程中执行网络操作 简而言之,我不知道该怎么做。感谢您的帮助!这是我的密码: package me.babblebox.application; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.Http

最近,我提出了一个关于使用POST数据执行HTTP请求的问题(在这里找到:),我被告知需要尝试类似AsyncTask的操作,因为我无法在主线程中执行网络操作

简而言之,我不知道该怎么做。感谢您的帮助!这是我的密码:

package me.babblebox.application;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class BabbleBoxActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void check_login() {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://babblebox.me/android/test.php");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("id", "12345"));
            nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }
    public void check_login_button(View v) {
           check_login();
    }
}
package me.babblebox.application;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
公共类BabbleBoxActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
公共无效检查\u登录(){
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://babblebox.me/android/test.php");
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“id”,“12345”);
添加(新的BasicNameValuePair(“stringdata”、“Hi”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
公共作废检查\登录\按钮(视图v){
检查_login();
}
}
还可以阅读

下面的内容远非完美,但您可以尝试类似的内容来开始

public class BabbleBoxActivity extends Activity {

    // Leave onCreate() as it is

    public void check_login_button(View v) {
        PostTask postTask = new PostTask();
        postTask.execute();
    }

    // EDITED THE LINE BELOW TO INCLUDE 'class'
    private class PostTask extends AsyncTask<Void, Void, Void> {

        // Move the code that was in check_login to the
        // doInBackground method below

        protected Void doInBackground(Void... params) {

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://babblebox.me/android/test.php");

            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("id", "12345"));
                nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }
            return null;
        }
    }
}
…我得到了以下响应标题

Header count: 6
Header: name=Date value=Sun, 11 Dec 2011 16:38:19 GMT
Header: name=Server value=LiteSpeed
Header: name=Connection value=close
Header: name=X-Powered-By value=PHP/5.3.8
Header: name=Content-Type value=text/html
Header: name=Content-Length value=4

来自任何web“请求”(GET、POST、PUT)的响应都会因您所使用的远程服务而异。您需要确定服务器将返回什么,然后相应地处理响应。

如果您不希望
异步任务
(无论出于何种原因),您可能可以执行以下操作

public void checkLoginAsync() {

   Executors.newSingleThreadExecutor(new Runnable(){
            @Override
            public void run() {
                  checkLogin();
   });
}

您可能会使
checkLogin()
接受侦听器的一些knd,然后它会向(比如)实现该侦听器的活动报告类似
onLoginError
onloginsAccess的内容。或者,您可以将其应用到您的应用程序中,这样无论当前显示的是什么活动,您都可以终止程序。

您看过吗?它几乎涵盖了它。。。你有什么特别的问题吗?@Craigy是的,我的问题是我如何使用它将POST/GET数据发送到HTTP网页,并获取回复?如果我不能做到这一点,有没有一种方法可以用OP中的方法在不同的线程上实现呢?因为我不知道怎么做。对不起-在PostTask定义中应该是
私有类PostTask extends…
-我省略了
类的工作
。它不会崩溃,所以我想这是一个好的开始!最后一件事-如何使用响应变量集?它是否在发送数据的页面上包含响应或其他内容?谢谢,谢谢,这让我更了解它。但是如果我想得到实际页面打印出来的输出呢?例如,页面echo的“Test”,我将如何使用此代码将其转换为要使用的字符串?这是AsyncTask的良好替代方案,具体取决于所需的复杂性。
public void checkLoginAsync() {

   Executors.newSingleThreadExecutor(new Runnable(){
            @Override
            public void run() {
                  checkLogin();
   });
}