httpClient.execute上的程序块:NullPointerException



我的安卓程序试图从本地主机的数据库中获取一些数据,为此我使用了AsynkTask类和一个JSONParser类。如果我调试程序,我可以到达HttpResponse httpResponse = httpClient.execute(httpPost);行:我无法转到下一条。

    public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
    // Se mancano dei commenti, andare a quelli del metodo precedente.
    // If there aren't some comments, go to the ones of the previous method.
    // Making HTTP request
    try {
        // Controlla il metodo.
        // Check for request method.
        if(method == "POST"){
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            // Invio dei parametri.
            // Passing the params.
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            HttpResponse httpResponse = httpClient.execute(httpPost);    // LAST LINE WHERE I COME
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }else if(method == "GET"){
            [...]
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    [...]
    // return JSON String
    return jObj;
}

如果我过滤LogCat中的异常,我会得到一些空指针异常:

    01-17 12:09:06.800      382-434/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '18 interface fwmark exempt add 10.0.2.2/32' failed with '400 18 Failed to add exemption rule (File exists)'
01-17 12:09:07.050      382-434/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '20 interface fwmark exempt add 10.0.2.3/32' failed with '400 20 Failed to add exemption rule (File exists)'
01-17 12:09:07.070      382-434/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '21 interface route add eth0 secondary 10.0.2.2 32 0.0.0.0' failed with '400 21 ip route modification failed (No such device)'
01-17 12:09:07.110      382-434/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '22 interface route add eth0 secondary 0.0.0.0 0 10.0.2.2' failed with '400 22 ip route modification failed (No such device)'
01-17 12:09:11.820      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '30 interface fwmark exempt add 10.0.2.2/32' failed with '400 30 Failed to add exemption rule (File exists)'
01-17 12:09:13.570      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '32 interface fwmark exempt add 173.194.40.6/32' failed with '400 32 Failed to add exemption rule (File exists)'
01-17 12:09:16.740      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '34 interface fwmark exempt add 10.0.2.2/32' failed with '400 34 Failed to add exemption rule (File exists)'
01-17 12:09:16.920      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '36 interface fwmark exempt add 173.194.40.4/32' failed with '400 36 Failed to add exemption rule (File exists)'
01-17 12:09:20.320      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '38 interface fwmark exempt add 10.0.2.2/32' failed with '400 38 Failed to add exemption rule (File exists)'
01-17 12:09:20.530      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '40 interface fwmark exempt add 173.194.40.6/32' failed with '400 40 Failed to add exemption rule (File exists)'
01-17 12:09:23.850      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '42 interface fwmark exempt add 10.0.2.2/32' failed with '400 42 Failed to add exemption rule (File exists)'
01-17 12:09:24.080      382-681/system_process E/ConnectivityService﹕ Exception trying to add a route: java.lang.IllegalStateException: command '44 interface fwmark exempt add 173.194.40.0/32' failed with '400 44 Failed to add exemption rule (File exists)'
01-17 12:12:59.065    1142-1159/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
01-17 12:12:59.075    1142-1159/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
01-17 12:12:59.165    1142-1159/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.example.app, PID: 1142
    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 com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:179)
            at com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:132)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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)
01-17 12:14:57.185    1197-1213/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
01-17 12:14:57.185    1197-1213/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
01-17 12:14:57.205    1197-1213/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.example.app, PID: 1197
    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 com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:179)
            at com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:132)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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)
01-17 12:15:27.805    1232-1246/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
01-17 12:15:27.805    1232-1246/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
01-17 12:15:27.875    1232-1246/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.example.app, PID: 1232
    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 com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:179)
            at com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:132)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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)
01-17 12:18:37.525    1285-1301/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
01-17 12:18:37.525    1285-1301/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
01-17 12:18:37.675    1285-1301/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.example.app, PID: 1285
    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 com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:179)
            at com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:132)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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)
01-17 12:24:49.535    1336-1352/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
01-17 12:24:49.535    1336-1352/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
01-17 12:24:49.555    1336-1352/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    Process: com.example.app, PID: 1336
    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 com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:179)
            at com.example.app.FragmentControllaCorsa$DownloadUltimaCorsa.doInBackground(FragmentControllaCorsa.java:132)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            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)

该NPE在FragmentControllaCorsa类的179和132行上升。在第 132 行有我在这里发布的内部类的声明:

class DownloadUltimaCorsa extends AsyncTask<Void, Void, JSONObject>{   // LINE 132
    private ProgressDialog pDialog;

// Test dall'Emulatore:
// Testing from Emulator:
private static final String LOGIN_URL = "http://10.0.2.2/PrimaAppAndroid/get/ultimaTratta.php";
// Tag(ID) del responso Json restituito dallo script php:
// JSON element ids from repsonse of php script:
private static final String TAG_SUCCESS = "success";
private static final String TAG_DATA = "Data";
private static final String TAG_DURATA = "DurataConvalida";
    /**
     * Metodo che viene eseguito prima di doInBackground.
     * Avvio il ProgressDialog.
     * --
     * Method executed before of doInBackgroung.
     * I start the ProgressDialog.
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Download ultima tratta...");
        // Dura un tempo indeterminato.
        // It lasts a undefined time.
        pDialog.setIndeterminate(false);
        // E' cancellabile dal tasto Back.
        // It's cancelable by the Back key.
        pDialog.setCancelable(true);
        pDialog.show();
    }
    @Override
    protected JSONObject doInBackground(Void... voids) {
        // Per il controllo se è andato a buon fine.
        // Checking if all goes well.
        int success;
        // Il parametro da passare.
        // The param to pass.
        String codice = codiceDocumento.getText().toString();
        JSONParser jsonParser = new JSONParser();
        try {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();  //http://stackoverflow.com/a/17609232/2337094 Namevaluepair
            params.add(new BasicNameValuePair("codice", codice));
            // Avvio della richiesta.
            // Start the request.
            JSONObject json = jsonParser.makeHttpRequest(
                    LOGIN_URL, "POST", params);
            // json success tag
            success = json.getInt(TAG_SUCCESS);    // LINE 179
            if (success == 1) {//SE VORRÒ GESTIRE L'ERRORE.
                return json;
            } else {
                return json;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * Metodo eseguito dopo doInBackground. Chiudo il ProgressDIalog.
     * --
     * Method executed after doInBackgroun. I Close the ProgressDialog.
     * @param json
     */
    @Override
    protected void onPostExecute(JSONObject json) {
        super.onPostExecute(json);
        // Chiudo il ProgressDialog.
        // Dismiss the ProgressDialog.
        pDialog.dismiss();
        try {
            ultimaCorsa.setText(json.getString(TAG_DATA));
            validitaCorsa.setText(json.getString(TAG_DURATA));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

在179号线有success = json.getInt(TAG_SUCCESS);。这是NPE上升的。在我的.php文件中有标签TAG_SUCCESS,那么为什么会出现这个异常呢?

如果在返回中定义了TAG_SUCCESS,那么你将需要引号,如果它是在 Java 中本地定义的,那么你就不需要引号了。

例:

.PHP

echo json_encode(array('myInt' => 1));

爪哇岛

int example;
example= json.getInt("myInt");

您收到空指针异常,因为 Java 正在寻找名为 TAG_SUCCESS 的本地定义的变量

例:

.PHP

echo json_encode(array('myInt' => 1));

爪哇岛

String myInt = "myInt";
int example;
example= json.getInt(myInt);

错误是清单中没有互联网权限,如此处所述。

由于这两个答案,我发现了错误:第一个和第二个

相关内容

最新更新