HttpClient.execute()后找不到源错误

时间:2013-05-09 21:05:48

标签: java android

我是Android开发的新手。我有以下类用于以JSON格式下载一些数据。我一直收到一个Source not found错误      HttpResponse httpResponse = httpClient.execute(httpPost); line ...我确定这必须是一个简单的修复......这是类代码......

 package com.example.tankandroid;

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.json.JSONException;
 import org.json.JSONObject;

 import android.util.Log;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

}

4 个答案:

答案 0 :(得分:0)

将此代码放入onCreate方法

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);

答案 1 :(得分:0)

使用Apache HttpCore和HttpClient库。将这两个库放入您的lib文件夹,它会自动将它们添加到您的构建路径中。

答案 2 :(得分:0)

出现这种情况的一个原因可能是AndroidManifest.xml文件中缺少互联网权限。在清单中添加此行将解决问题。

<uses-permission android:name="android.permission.INTERNET" />

答案 3 :(得分:-1)

您需要提供一些我认为的更多信息。你在哪里得到“未找到来源”错误?它是一个Eclipse错误,阻止您编译。是在编译期间吗?这是运行时错误吗?这可能是:Source not found Android?吗?

问题:如果您不打算添加任何POST数据,为什么要进行HTTP POST? GET似乎更合适。

既然你也问“我确定这必须是一个简单的解决方案”,那么是的,确实如此。我真的建议您删除HTTP代码并切换到Android Asynchronous Http Client。它非常容易使用,非常适合获取HTTP响应并解析它。例如:

AsyncHttpClient client = new AsyncHttpClient();
RequestParams rp = new RequestParams();
rp.put("some_param", "some value");
rp.put("another_param", "some other value");
client.post("http://www.simonsayssolutions.co.uk/index.php", rp, new AsyncHttpResponseHandler() {
    @Override
    public final void onSuccess(String response) {
        // handle your response and parse JSON here
    }

    @Override
    public void onFailure(Throwable e, String response) {
        // something went wrong
    }               
});

或GET:

client.get("http://www.simonsayssolutions.co.uk/index.php", rp, new AsyncHttpResponseHandler() {
...
}

最后,如果您想简化JSON解析,请查看JacksonGson。特别是如果要将JSON数据解析为Java对象,反之亦然。