Java 试图发送到JSON时,应用程序在HttpResponse response=httpclient.execute(httpget)上崩溃

Java 试图发送到JSON时,应用程序在HttpResponse response=httpclient.execute(httpget)上崩溃,java,android,json,httpclient,Java,Android,Json,Httpclient,我试图从Android应用程序中获取JSONObject,但在 response=httpclient.execute(httpget)并引发异常 我认为问题在于url编码,但我不确定。若我并没有对URL进行编码,那个么应用程序会在上面的几行代码中崩溃 我传递的URL是: 和日志: 12-01 11:04:01.336: D/(1631): HostConnection::get() New Host Connection established

我试图从Android应用程序中获取
JSONObject
,但在
response=httpclient.execute(httpget)
并引发异常

我认为问题在于url编码,但我不确定。若我并没有对URL进行编码,那个么应用程序会在上面的几行代码中崩溃

我传递的URL是:


和日志:

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)

主要活动相关代码:

@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";

你的应用程序在MAINACTIVITY中的行号
87
上崩溃

java.lang.NullPointerException 12-01 10:25:08.546: E/AndroidRuntime(1428): at com.example.loterianavidad.MainActivity$2.onClick(MainActivity.java:87) 

因为您在MAINACTIVITY的引用XML视图中不存在的按钮上使用了
onclicklistener
,当前您正在使用参数对整个url进行编码,所以只需对参数进行编码,然后在传递到
HttpGet
构造函数之前附加到url,如下所示:

java.lang.NullPointerException 12-01 10:25:08.546: E/AndroidRuntime(1428): at com.example.loterianavidad.MainActivity$2.onClick(MainActivity.java:87) 
String str_url="99999";
encodeUrl = URLEncoder.encode(url, "UTF-8");
String final_url="http://api.elpais.com/ws/LoteriaNavidadPremiados?n="+encodeUrl;

问题在
MainActivity
line
87
中的
onClick
方法中,请共享相关代码部分以获得更多帮助,我仅实例化该对象。86JSONObject j=json.getJson(“);87.Log.d(“Log”,j.toString());//要检查对象是否正确,请使用
JSONObject j=json.getJson(“api.elpais.com/ws/LoteriaNavidadPremiados?n=99999”);
而不是类名称中的小
s
,因为
getJson
方法是
static
,所以您可以在不创建Json类实例的情况下访问它。好的,做吧。但问题不在MainActivity中。在这个类中。Log.d(“Log”,“我在LOGCAT中看到的代码”);HttpResponse response=httpclient.execute(httpget)这里是CRASH Log.d(“Log”,“这个代码我在LOGCAT中看不到”);你能在LOGCAT中看到Log.d(“Log_异常”,“未报告的编码异常”);行吗?如果是,则共享完整的LOGCAT结果或MainActivity代码,该按钮工作正常。如果我删除MAIN 87 Log.d(“Log”,j.toString())中的第87行under的代码工作正常。很好!非常感谢。但不幸的是,我甚至有一个问题。一秒钟。@IkerOcioZuazo:什么问题?最后我有两个问题。第一个问题是,如果我像这样在URL“”中编码参数,我收到的json是busqueda={“error”:1},但是如果您收到来自普通URL的请求(将“%3D”替换为“=”),我收到的json是busqueda={“numero”:99999,“premio”:0,“timestamp”:1356190680,“status”:2,“error”:0}。我想最好再问一个问题。@IkerOcioZuazo:我的错误只是编码值而不是参数,遵循以下语法::www.example.com/test/name=URLEncoder.encode(url,“UTF-8”)+“second_param=“+URLEncoder.encode(url,”第二个问题是“result”变量,返回一个字符串:example={“key”:value,“key2”:value2}…好的。然后我创建JSONObject JSONObject=new JSONObject(result),如果我用logcat类似于Log.d(“Log”,JSONObject.toString())的东西查看,logcat会引发另一个NullPointerException。知道吗?