android - Java抛出我的FileNotFound异常HttpURLConnection

时间:2016-06-09 22:21:28

标签: java android http

我有一个带有静态函数的类来向Web服务器发出POST请求。到目前为止,它正在为我所做的每个请求工作,但是我添加了一个新的.php文件,它在新脚本的函数调用中抛出了一个FileNotFound异常。我通过浏览器和Postman测试了它,脚本可以工作。

班级/职能:

public class WebServices {
public static final String CONNECTION_URL = "http://192.168.1.101/klikniobrok/";
public static final String LOGIN = "login.php";
public static final String REGISTER = "register.php";
public static final String RESTAURANTS = "restaurant.php";
public static final String MENU = "menu.php";
public static final String MENU_ENTRIES = "menuentries.php";
public static final String EMPLOYEE_LOGIN = "employeelogin.php";
public static final String GET_TABLE = "table.php";
public static final String ADD_ORDER = "insertorder.php";
public static final String RETRIEVE_ACTIVE_ORDERS = "activeorders.php";
public static final String COMPLETE_ORDER = "completeorder.php";

public static JSONObject makeHttpPostRequest(List<Pair<String, String>> params, String action) {
    JSONObject requestResponse;
    try {
        StringBuilder postData = new StringBuilder();
        if(params != null) {
            for (int i = 0; i < params.size(); i++) {
                if (postData.length() != 0) {
                    postData.append("&");
                }
                postData.append(URLEncoder.encode(params.get(i).first, "UTF-8"));
                postData.append("=");
                postData.append(URLEncoder.encode(params.get(i).second, "UTF-8"));
            }
        }
        byte[] postDataBytes = postData.toString().getBytes("UTF-8");
        URL connUrl = new URL(CONNECTION_URL + action);
        HttpURLConnection connection = (HttpURLConnection) connUrl.openConnection();
        connection.setRequestMethod(HttpMethods.POST);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        connection.setDoOutput(true);
        connection.setDoInput(true);
        if(postDataBytes.length > 0) {
            connection.getOutputStream().write(postDataBytes);
        }
        BufferedReader requestInputReader = new BufferedReader(new InputStreamReader(connection.getInputStream(),
                "UTF-8"));
        StringBuilder requestInput = new StringBuilder();
        for(String line = requestInputReader.readLine(); line != null; line = requestInputReader.readLine()) {
            requestInput.append(line).append("\n");
        }
        requestInputReader.close();
        connection.disconnect();
        requestResponse = new JSONObject(requestInput.toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
        requestResponse = null;
    } catch (IOException e) {
        e.printStackTrace();
        requestResponse = null;
    } catch (JSONException e) {
        e.printStackTrace();
        requestResponse = null;
    }
    return requestResponse;
}

例外:

    06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err: java.io.FileNotFoundException: http://192.168.1.101/klikniobrok/completeorder.php
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:258)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at mk.klikniobrok.klikniobrok.WebServices.makeHttpPostRequest(WebServices.java:59)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at mk.klikniobrok.klikniobrok.helpers.CompleteOrder.doInBackground(OrderProcessor.java:37)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at mk.klikniobrok.klikniobrok.helpers.CompleteOrder.doInBackground(OrderProcessor.java:31)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-10 00:09:52.606 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-10 00:09:52.607 12561-13302/mk.klikniobrok.klikniobrok W/System.err:     at java.lang.Thread.run(Thread.java:818)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.getInt(java.lang.String)' on a null object reference
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at mk.klikniobrok.klikniobrok.helpers.OrderProcessor.setOrderCompeted(OrderProcessor.java:164)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at mk.klikniobrok.klikniobrok.ActiveOrdersActivity$2.onClick(ActiveOrdersActivity.java:103)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.view.View.performClick(View.java:5226)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.view.View$PerformClick.run(View.java:21266)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.os.Looper.loop(Looper.java:168)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5781)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
06-10 00:09:52.608 12561-12561/mk.klikniobrok.klikniobrok W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

后续空指针异常是第一个结果。

对函数的调用:

    class CompleteOrder extends AsyncTask<Pair<String, String>, Void, JSONObject> {
    @Override
    protected JSONObject doInBackground(Pair<String, String>... params) {
        return WebServices.makeHttpPostRequest(Arrays.asList(params), WebServices.COMPLETE_ORDER);
    }

    @Override
    protected void onPostExecute(JSONObject response) {
        // other logic here
    }
}

正如我所说,该功能适用​​于其他“动作”,即用于发布到其他脚本时。例如,我可以在单击调用方法的按钮之前登录。为什么会这样?

1 个答案:

答案 0 :(得分:1)

发生了FileNotFoundException,因为服务器为您提供了404 Not Found响应。

您需要查看您使用的URL和/或服务器和/或服务器端日志返回的“错误页面”文档,以找出服务器执行此操作的原因。

  

正如我所说,该功能适用​​于其他“动作”,即用于发布到其他脚本时

显然...... 某事是不同的。

相关问题