httpclient 在异步任务中不起作用

httpclient does not work in asynctask

我在 asynctask doInBackground 中使用 httpclient 来获取我的 php-session

这是我的Java代码:

package com.example.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;

public class MainActivity extends Activity {

    private String aktuell_date_u,set_check;
    public static DefaultHttpClient client = new DefaultHttpClient();
    private ProgressDialog pd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_main);

        pd = new ProgressDialog(MainActivity.this);
        pd.setMessage("bitte warten...");
        pd.show();

        new get_sessions();

    }
    private class get_sessions extends AsyncTask<String, Void, JSONObject> {

        @Override
        protected JSONObject doInBackground(String... arg0) {

            HttpGet post = new HttpGet("http://www.example.com/getsessions.php");
            try {
                HttpResponse response = client.execute(post);
                BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuilder sb = new StringBuilder();
                String line = "";
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
                    break;
                }
                return new JSONObject(sb.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
        protected void onPostExecute(JSONObject result){
            aktuell_date_u = result.optString("aktuell_date_u").toString();
            set_check = result.optString("set_check").toString();
            pd.cancel();
        }
    }
}

这是我的 php 代码:

<?php

session_start();

header('content-type: aplication/json; charset=utf-8');

setcookie("cookie_test", date('U'));

$aktuell_date_u=date('U');
$_SESSION['set_check']=md5($aktuell_date_u);

echo '{"aktuell_date_u":"'.$aktuell_date_u.'","set_check":"'.$_SESSION['set_check'].'"}';

?>

PregressDialog 加载和加载...

我做错了什么,因为我的 httpclient codesdoInBackground

特别感谢

您没有调用 AsyncTaskexecute() 方法,因此 AsyncTask 永远不会运行。而不是

new get_sessions();

您需要致电:

new get_sessions().execute(null);

由于您没有使用传递给 doInBackground() 的参数,我不确定您为什么将它们定义为 String

您可能还应该查看有关 Java 编码约定的一些基本培训并遵循它们 - 例如使 Class 名称以大写字母开头并使用驼峰式封装而不是使用下划线。遵循约定可以让您的代码更容易被其他人阅读。