- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试从 Android 应用获取 JSONObject
但崩溃了response = httpclient.execute(httpget)
并引发异常。
我认为问题出在 url 编码上,但我不确定。如果我不编码 URL,应用程序会在 httpget = new HttpGet(encodeURL)
上的几行崩溃。
我传递的URL是:http://api.elpais.com/ws/LoteriaNavidadPremiados?n=99999
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class Json {
public Json(){
}
public static JSONObject getJson(String url) {
String encodeUrl = null;
InputStream is = null;
String result = "";
JSONObject jsonObject = null;
HttpGet httpget;
// Encode URL. If not, HttpGet will crash
try {
encodeUrl = URLEncoder.encode(url, "UTF-8");
//encodeUrl = encodeUrl.replaceAll("%3F", "?"); // I tried replacing this but does not work
//encodeUrl = encodeUrl.replaceAll("%3D", "="); //
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
Log.d("LOG_EXCEPTION", "Unsuported Encoding Exception");
e1.printStackTrace();
}
// HTTP
try {
HttpClient httpclient = new DefaultHttpClient(); // for port 80
// requests!
httpget = new HttpGet(encodeUrl);
// HttpPost httppost = new HttpPost(url);
Log.d("LOG", "THIS CODE I SEE in LOGCAT");
HttpResponse response = httpclient.execute(httpget); // HERE CRASH
Log.d("LOG", "THIS CODE I DO NOT SEE in LOGCAT");
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (IOException e) {
Log.d("LOG_EXCEPTION", "IOException");
} catch (IllegalArgumentException e) {
Log.d("LOG_EXCEPTION", "URL no valida");
} catch (Exception e) {
// return null;
Log.d("LOG_EXCEPTION", "Exception");
}
// Read response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.d("LOG_EXCEPTION", "Reader response to string");
// return null;
}
// Convert string to object
try {
jsonObject = new JSONObject(result);
} catch (JSONException e) {
// return null;
}
return jsonObject;
}
}
<小时/>
和日志:
12-01 11:04:01.336: D/(1631): HostConnection::get() New Host Connection established 0xb8d029d0, tid 1631
12-01 11:04:05.866: D/LOG(1631): http%3A%2F%2Fapi.elpais.com%2Fws%2FLoteriaNavidadPremiados?n=99999
12-01 11:04:05.866: D/LOG(1631): httpget work fine
12-01 11:04:06.176: D/LOG_EXCEPTION(1631): Exception
12-01 11:04:06.176: D/LOG_EXCEPTION(1631): Reader response to string
12-01 11:04:06.176: D/AndroidRuntime(1631): Shutting down VM
12-01 11:04:06.186: W/dalvikvm(1631): threadid=1: thread exiting with uncaught exception (group=0xb1a5bb90)
12-01 11:04:06.186: E/AndroidRuntime(1631): FATAL EXCEPTION: main
12-01 11:04:06.186: E/AndroidRuntime(1631): Process: com.example.loterianavidad, PID: 1631
12-01 11:04:06.186: E/AndroidRuntime(1631): java.lang.NullPointerException
12-01 11:04:06.186: E/AndroidRuntime(1631): at com.example.loterianavidad.MainActivity$2.onClick(MainActivity.java:86)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.view.View.performClick(View.java:4424)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.view.View$PerformClick.run(View.java:18383)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.os.Handler.handleCallback(Handler.java:733)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.os.Handler.dispatchMessage(Handler.java:95)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.os.Looper.loop(Looper.java:137)
12-01 11:04:06.186: E/AndroidRuntime(1631): at android.app.ActivityThread.main(ActivityThread.java:4998)
12-01 11:04:06.186: E/AndroidRuntime(1631): at java.lang.reflect.Method.invokeNative(Native Method)
12-01 11:04:06.186: E/AndroidRuntime(1631): at java.lang.reflect.Method.invoke(Method.java:515)
12-01 11:04:06.186: E/AndroidRuntime(1631): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-01 11:04:06.186: E/AndroidRuntime(1631): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-01 11:04:06.186: E/AndroidRuntime(1631): at dalvik.system.NativeStart.main(Native Method)
<小时/>
MainActivity相关代码:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Context context = getApplicationContext();
CharSequence text = "Accediendo a la base de datos...";
JSONObject j = Json.getJson("http://api.elpais.com/ws/LoteriaNavidadPremiados?n=99999");
Log.d("LOG", j.toString()); // HERE is LINE 87
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
String prem = "hola";
最佳答案
目前,您正在使用参数对整个 url 进行编码,因此只需对参数进行编码,然后在传递给 HttpGet
构造函数之前附加到 url,如下所示:
String str_url="99999";
encodeUrl = URLEncoder.encode(url, "UTF-8");
String final_url="http://api.elpais.com/ws/LoteriaNavidadPremiados?n="+encodeUrl;
关于java - 尝试发送到 JSON 时,应用程序在 HttpResponse 响应 = httpclient.execute(httpget) 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20313918/
公共(public)类 ServiceHandler { static String response = null; public final static int GET = 1; public
为什么在WebApi框架中使用HttpGet而不是HttpPost? 我很清楚 Post 或 Get 类型之间的区别,一个是通过 url,另一个不是(作为基本理解) 但我也知道主要区别(可以在服务器上
我正在尝试做一件非常简单的事情,几天前它还在工作。 CloseableHttpClient client = HttpClientBuilder.create().build();
我正在尝试从 html 编写此脚本,但无法得到结果,有什么问题吗? function httpGet() { var httpClient = util.newHttpClient(); v
我正在尝试从以下 URL 获取文本响应: http://translate.google.cn/translate_a/single?client=t&sl=zh-CN&tl=en&dt=t&tk=2
我的 MainActivity.java 文件中有这个: public static void getLatestVersion() { try { Strin
我正在尝试使用 GET 将参数发送到脚本,但我收到此错误: java.lang.IllegalStateException: Target host must not be null, or set
我正在使用 Slim 框架通过 GET 方法在 Android 中执行 REST API。我对检索表的所有值没有任何问题,例如 cars。 当我尝试通过 id 访问 Car 的 name 时,问题就来
我正在努力通过查询字符串获取数据。我已经完成了 httppost,但我还没有尝试使用 httpget。但我不能。 List nameValuePairs = new ArrayList();
因此,我使用的是另一篇旧帖子中的以下代码,但其中一部分有问题,行:HttpGet request = new HttpGet(url); 不起作用。在 url 点我放了类似 www.stackover
是否可以在 HttpGet 中使用管道字符? 我有一个用竖线分隔的经纬度列表,例如53.42290885462988,-1.4404749870300293|53.39965626194152,-1.
我想从我的 Android 应用程序中执行 httpGet,但我没有得到任何响应,当我从浏览器中执行相同的 httpGet 时它起作用了。我还使用 chrome 扩展 Postman 来测试我发送的
我正在使用 RESTFul HttpGet 服务 导入org.apache.http.client.methods.HttpGet; 我创建了一个函数来查询另一台计算机上的服务。该调用工作正常,但是我
Startup.cs,样板: app.UseMvc(routes => { routes.MapRoute( name: "default", template
我希望能够将复杂类型作为我的 HttpGet 方法的参数进行处理。 当 api 方法不接受任何参数时,方法 pickNFirstElements 起作用,但当我尝试传递对象时不起作用。 我有一个想法,
让我先概括一下情况: 我有一个基本的 Controller ,如下所示: public class SearchRequestController : ApiController { publ
我正在用 Ruby 编写一些代码...但我无法弄清楚基本身份验证如何与 Crystal-lang 一起工作。 在 ruby 中,我必须始终使用 request.basic_auth 但这在 Cry
我正在开发 Uber API,并尝试使用 here 中的说明获取用户个人资料。 以下curl命令工作正常,可以从uber获取用户信息: curl -H "Authorization: Bearer Y
我正在使用 HttpGet 返回一个文件,并且 HttpGet 不允许参数是 URL,它必须是 URL,但是我面临的问题是我必须*使用 httpclient,并且我需要能够在 URI/URL 中放置特
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (65 个回答) 已关闭10 年前。 我正在尝试向 http:
我是一名优秀的程序员,十分优秀!