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 codes
是 doInBackground
特别感谢
您没有调用 AsyncTask
的 execute()
方法,因此 AsyncTask 永远不会运行。而不是
new get_sessions();
您需要致电:
new get_sessions().execute(null);
由于您没有使用传递给 doInBackground()
的参数,我不确定您为什么将它们定义为 String
。
您可能还应该查看有关 Java 编码约定的一些基本培训并遵循它们 - 例如使 Class 名称以大写字母开头并使用驼峰式封装而不是使用下划线。遵循约定可以让您的代码更容易被其他人阅读。
我在 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 codes
是 doInBackground
特别感谢
您没有调用 AsyncTask
的 execute()
方法,因此 AsyncTask 永远不会运行。而不是
new get_sessions();
您需要致电:
new get_sessions().execute(null);
由于您没有使用传递给 doInBackground()
的参数,我不确定您为什么将它们定义为 String
。
您可能还应该查看有关 Java 编码约定的一些基本培训并遵循它们 - 例如使 Class 名称以大写字母开头并使用驼峰式封装而不是使用下划线。遵循约定可以让您的代码更容易被其他人阅读。