【问题标题】:Source not found error after HttpClient.execute()HttpClient.execute() 后找不到源错误
【发布时间】:2013-05-09 21:05:48
【问题描述】:

我是安卓开发新手。我有以下类用于以 JSON 格式下载一些数据。我不断收到 Source not found 错误 HttpResponse 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;

}

}

【问题讨论】:

  • 你在用什么url
  • 这个 Source not found 错误确实具有误导性,你能确定这是被捕获的异常吗?
  • 该 URL 看起来不错,它返回格式良好的 JSON。您能否看看我的回答,并提供一些有关您何时何地收到“找不到源”消息的更多信息

标签: java android


【解决方案1】:

将此代码放入onCreate方法中

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我认为您需要提供更多信息。您从哪里得到“找不到源”错误?是否是 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 对象,反之亦然。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-27
          • 1970-01-01
          • 1970-01-01
          • 2015-11-24
          相关资源
          最近更新 更多