Android 如何添加线程?

Android 如何添加线程?,android,asynchronous,http-post,Android,Asynchronous,Http Post,这是从现在开始的 我不知道如何从主UI线程添加一个单独的线程来完成从服务器收集数据的工作。我以前从未做过线程,我认为我构造的类中的这个实例使它比我能找到的任何示例都要高级一些 任何帮助和我的班级张贴修订将不胜感激 谢谢你 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getInt

这是从现在开始的

我不知道如何从主UI线程添加一个单独的线程来完成从服务器收集数据的工作。我以前从未做过线程,我认为我构造的类中的这个实例使它比我能找到的任何示例都要高级一些

任何帮助和我的班级张贴修订将不胜感激

谢谢你

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        setContentView(R.layout.list_view2);

        /**
         * Get the query string from last activity and pass it to this
         * activity-----------------------------------------------------
         */
        String p = null;
        if (extras != null) {
            p = extras.getString(PHP_KEY);          
        }
        loadQuery(p);
    }

    void loadQuery(String p) {

        String qO = getIntent().getStringExtra("QUERY_ORDER");

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        // http post
        try {

             HttpClient httpclient = new DefaultHttpClient();
             HttpPost httppost = new HttpPost("http://10.0.2.2/App/php/" +
             p + qO + ".php");

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }

        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            String line = "0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }

            is.close();
            result = sb.toString();

        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        setListAdapter(new QueryAdapter(this, result));
    }
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle extras=getIntent().getExtras();
setContentView(R.layout.list_视图2);
/**
*从上一个活动获取查询字符串并将其传递给此
*活动-----------------------------------------------------
*/
字符串p=null;
如果(附加值!=null){
p=extras.getString(PHP_键);
}
loadQuery(p);
}
void loadQuery(字符串p){
字符串qO=getIntent().getStringExtra(“查询顺序”);
ArrayList nameValuePairs=新的ArrayList();
//http post
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://10.0.2.2/App/php/" +
p+qO+“.php”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
is,“iso-8859-1”),8);
sb=新的StringBuilder();
sb.append(reader.readLine()+“\n”);
字符串行=“0”;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
setListAdapter(新的QueryAdapter(this,result));
}
请参见下面我的答案

您只需使用

下面是一个关于如何使用它的好教程

下面是一个下载网页并将结果返回到主UI的示例

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        String response = "";
        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response += s;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        textView.setText(result);
    }
}
私有类下载WebPagetTask扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串响应=”;
for(字符串url:url){
DefaultHttpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(url);
试一试{
HttpResponse execute=client.execute(httpGet);
InputStream内容=execute.getEntity().getContent();
BufferedReader buffer=新的BufferedReader(
新的InputStreamReader(内容));
字符串s=“”;
而((s=buffer.readLine())!=null){
响应+=s;
}
}捕获(例外e){
e、 printStackTrace();
}
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串结果){
setText(结果);
}
}

使用,Luke。

我会使用AsyncTask的扩展。以下是一个示例:

public TestSync extends AsyncTask<Void, Integer, Integer> {
    TextView mTv = null;
    String mURL;
    public TestSync(TextView tv, String url) {
        mTv = tv;
        mURL = url;
    }

    @Override public Void doInBackground(Void... voids) {
        int count = 0;
        URL url = null;
        BufferedReader br = null;
        try {
            url = new URL(mURL);
            br = new BufferedReader(new InputStreamReader(url.openStream));
            String log = null;

            while ((log = br.readLine()) != null) {
                Log.d("Testo", log);
                count++;
                publishProgress(new int[] {count});
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) 
                    is.close();
            } catch (Exception e) { /* eat*/ }
        }

        return count;
    }

    @Override public void onProgressUpdate(Integer... vals) {
        mTv.setText(vals[0]);
    }

    @Override public void onPostExecute(Integer inte) {
        Toast.makeText(context, "We read " + inte + " lines from the url.", Toast.LENGTH_LONG).show();
    }
}
publictestsync扩展异步任务{
TextView mTv=null;
弦乐;
公共测试同步(文本视图电视,字符串url){
mTv=电视;
mURL=url;
}
@覆盖公共Void doInBackground(Void…voids){
整数计数=0;
URL=null;
BufferedReader br=null;
试一试{
url=新url(mURL);
br=新的BufferedReader(新的InputStreamReader(url.openStream));
字符串log=null;
而((log=br.readLine())!=null){
Log.d(“Testo”,Log);
计数++;
publishProgress(新int[]{count});
}
}捕获(例外e){
e、 printStackTrace();
}最后{
试一试{
如果(is!=null)
is.close();
}捕获(例外e){/*eat*/}
}
返回计数;
}
@重写公共void onProgressUpdate(整数…VAL){
mTv.setText(VAL[0]);
}
@重写公共void onPostExecute(整数inte){
Toast.makeText(上下文,“我们从url读取”+inte+“行。”,Toast.LENGTH_LONG.show();
}
}
…loadQuery();
}
void loadQuery(){
新线程(newrunnable()){
公开募捐{
字符串qO=getIntent().getStringExtra(“查询顺序”);
字符串php=getIntent().getStringExtra(“php_键”);
ArrayList nameValuePairs=新的ArrayList();
//http post
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(
"http://10.0.2.2/Andaero/php/“+php+qO+”.php”);
Log.e(“Log_标记”,“Fetched”+php+qO+“.php”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(
新的InputStreamReader(is,“iso-8859-1”),8);
sb=新的StringBuilder(
....loadQuery();
    }

    void loadQuery() {

        new Thread(new Runnable() {

            public void run() {

                String qO = getIntent().getStringExtra("QUERY_ORDER");
                String php = getIntent().getStringExtra("PHP_KEY");

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                // http post
                try {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(
                            "http://10.0.2.2/Andaero/php/" + php + qO + ".php");

                    Log.e("log_tag", "Fetched " + php + qO + ".php");

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();

                } catch (Exception e) {

                    Log.e("log_tag", "Error in http connection " + e.toString());
                }

                // convert response to string
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is, "iso-8859-1"), 8);
                    sb = new StringBuilder();
                    sb.append(reader.readLine() + "\n");

                    String line = "0";
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }

                    is.close();
                    result = sb.toString();

                } catch (Exception e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                }

            }

        }).start();
    }