0

我是android开发的新手。我有以下类用于以 JSON 格式下载一些数据。我在 HttpResponse 上不断收到 Source not found 错误 httpResponse = httpClient.execute(httpPost); 行...我确定这一定是一个简单的修复...这是课程代码...

 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

4 回答 4

0

将此代码放在 onCreate 方法中

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
于 2015-08-06T11:13:59.313 回答
0

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

于 2015-09-21T11:24:24.280 回答
0

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

<uses-permission android:name="android.permission.INTERNET" />
于 2015-10-11T12:57:27.073 回答
-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
    }               
});

或获取:

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

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

于 2013-05-09T21:17:30.750 回答