HttpGet上的java.lang.NullPointerException httpGet = new HttpGet(url);

时间:2014-12-26 16:01:40

标签: android json

public class ServiceHandler {

static String response = null;
public final static int GET = 1;
public final static int POST = 2;

public ServiceHandler() {

}

/*
 * Making service call
 * @url - url to make request
 * @method - http request method
 * */
public String makeServiceCall(String url, int method) {
    return this.makeServiceCall(url, method, null);
}

/*
 * Making service call
 * @url - url to make request
 * @method - http request method
 * @params - http request params
 * */
public String makeServiceCall(String url, int method,
                              List<NameValuePair> params) {
    try {
        // http client
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpEntity httpEntity = null;
        HttpResponse httpResponse = null;

        // Checking http request method type
        if (method == POST) {
            HttpPost httpPost = new HttpPost(url);
            httpResponse = httpClient.execute(httpPost);

        } else if (method == GET) {

            HttpGet httpGet = new HttpGet(url);
            httpResponse = httpClient.execute(httpGet);

        }
        httpEntity = httpResponse.getEntity();
        response = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return response;

}

}

这是我用来从REST请求中获取String的类

    12-26 10:51:35.610    1750-1778/hackerspace.invento.ebooks E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
Process: hackerspace.invento.ebooks, PID: 1750
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.NullPointerException
        at java.net.URI.parseURI(URI.java:353)
        at java.net.URI.<init>(URI.java:204)
        at java.net.URI.create(URI.java:725)
        at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
        at hackerspace.invento.ebooks.ServiceHandler.makeServiceCall(ServiceHandler.java:63)
        at hackerspace.invento.ebooks.ServiceHandler.makeServiceCall(ServiceHandler.java:39)
        at hackerspace.invento.ebooks.Books$GetResult.doInBackground(Books.java:113)
        at hackerspace.invento.ebooks.Books$GetResult.doInBackground(Books.java:94)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)

在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:841)

这是我得到的日志错误如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我的猜测是,您要么将NULL字符串传递给您的方法,要么由于某种原因,如果NULL方法无法解析,则字符串设置为HttpGet()网址或其他错误。请尝试在try / catch声明的末尾添加此内容:

catch (Exception e)
{
    Log.e("MyApp", "exception: " + e.getMessage());
    Log.e("MyApp", "exception: " + e.toString());
}

通常情况下,这样的陈述在您的软件中使用是不好的做法,因为它基本上会压制您获得的任何异常,而不会让您处理各种异常情况。但是,出于调试目的,在try / catch语句末尾添加此语句将允许您查看是否可能存在导致HttpGet()导致缺失的异常失败的方法反过来会导致NULL错误。如果您确实检测到另一个异常,则可以对其进行适当处理,以使您的方法不再返回NULL字符串。

答案 1 :(得分:1)

您的urlNULL

URISyntaxException 

抛出:java.lang.NullPointerException如果输入或原因字符串为null