我是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;
}
}
答案 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解析,请查看Jackson或Gson。特别是如果要将JSON数据解析为Java对象,反之亦然。