解决方案 »

  1.   

    把错误信息贴上来再看这个额贴这么一大块东西上来,眼睛都看花了,好歹注一下是哪里出错的关于http,如果版本上出现问题看一下你是不是在主线程中请求数据的,如果是,放到子线程,android4.0以后的版本不允许在主线程访问网络(3.0以上的是平板的,我不是很清楚)
    查一查是不是这个原因吧,
    如果不是,把详细的错误信息贴上来
      

  2.   

    错误信息贴出来  还有就是贴下面代码试试 在访问网络前 把判断4.0降为3.0就行  以前判断的为4.0就进入
    // 如果本系统为4.0以上(Build.VERSION_CODES.ICE_CREAM_SANDWICH为android4.0)
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    // 详见StrictMode文档
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads().detectDiskWrites().detectNetwork()
    .penaltyLog().build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
    .penaltyLog().penaltyDeath().build());
    }
      

  3.   

    确实是在主进程去获取服务器数据,如果用子线程去获取数据,应该如何处理?AsyncTask或Handle这两种方式哪种比较好?用AsyncTask去处理如何把数据反回到主线程?
      

  4.   

    难道所有主线程界面操作都由子线程去完成吗?有没有好的AsyncTask和Handle例子?
      

  5.   

    package UtilityBundle;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    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.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpUriRequest;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import android.os.Handler;
    import android.util.Log;
    public class HttpConnectionUtil {
    public static enum HttpMethod {GET, POST}

    public void asyncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {
    asyncConnect(url, null, method, callback);
    }

    public void syncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {
    syncConnect(url, null, method, callback);
    }

    public void asyncConnect(final String url, final Map<String, String> params, 
    final HttpMethod method, final HttpConnectionCallback callback) {
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
    public void run() {
    syncConnect(url, params, method, callback);
    }
    };
    handler.post(runnable);
    }

    public void syncConnect(final String url, final Map<String, String> params, 
    final HttpMethod method, final HttpConnectionCallback callback) {
    String json = null;
    BufferedReader reader = null;

    try {
    HttpClient client = new DefaultHttpClient();
    HttpUriRequest request = getRequest(url, params, method);
    HttpResponse response = client.execute(request);
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    StringBuilder sb = new StringBuilder();
    for (String s = reader.readLine(); s != null; s = reader.readLine()) {
    sb.append(s);
    }
    json = sb.toString();
    }
    } catch (ClientProtocolException e) {
    Log.e("HttpConnectionUtil", e.getMessage(), e);
    } catch (IOException e) {
    Log.e("HttpConnectionUtil", e.getMessage(), e);
    } finally {
    try {
    if (reader != null) {
    reader.close();
    }
    } catch (IOException e) {
    // ignore me
    }
    }
    callback.execute(json);
    }

    private HttpUriRequest getRequest(String url, Map<String, String> params, HttpMethod method) {
    if (method.equals(HttpMethod.POST)) {
    List<NameValuePair> listParams = new ArrayList<NameValuePair>();
    if (params != null) {
    for (String name : params.keySet()) {
    listParams.add(new BasicNameValuePair(name, params.get(name)));
    }
    }
    try {
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(listParams);
    HttpPost request = new HttpPost(url);
    request.setEntity(entity);
    return request;
    } catch (UnsupportedEncodingException e) {
    // Should not come here, ignore me.
    throw new java.lang.RuntimeException(e.getMessage(), e);
    }
    } else {
    if (url.indexOf("?") < 0) {
    url += "?";
    }
    if (params != null) {
    for (String name : params.keySet()) {
    url += "&" + name + "=" + URLEncoder.encode(params.get(name));
    }
    }
    HttpGet request = new HttpGet(url);
    return request;
    }
    }
    }package UtilityBundle;public interface HttpConnectionCallback {
    void execute(String response);
    }
    不知道怎么实现这个接口,我直接用Login extends Activity implements HttpConnectionCallback 实现后,但执行不了void execute(String response){这里如果操作response就会出错}