Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP Post Android webview_Android_Asp.net Mvc_Webview_Http Post_Http Post Vars - Fatal编程技术网

HTTP Post Android webview

HTTP Post Android webview,android,asp.net-mvc,webview,http-post,http-post-vars,Android,Asp.net Mvc,Webview,Http Post,Http Post Vars,我正在尝试实现一个函数,它通过HTTPPOST将base64编码的图像从webview传递到我的web应用程序。然后,比方说,这个图像必须立即显示在我的视图中。我使用过这个,但它不能正常工作,所以在谷歌搜索了一点之后,我开始使用AsyncTask: public void tryUpload(String url, Context context) { new UploadTask(context).execute(url); } private class UploadTask ex

我正在尝试实现一个函数,它通过HTTPPOST将base64编码的图像从webview传递到我的web应用程序。然后,比方说,这个图像必须立即显示在我的视图中。我使用过这个,但它不能正常工作,所以在谷歌搜索了一点之后,我开始使用AsyncTask:

public void tryUpload(String url, Context context) {
    new UploadTask(context).execute(url);
}

private class UploadTask extends AsyncTask<String, Void, HttpResponse> {
    private Context context;
    public UploadTask(Context ctx) {
        context = ctx;
    }

    @Override
    protected HttpResponse doInBackground(String... urls) {
        List<NameValuePair> formData = new ArrayList<NameValuePair>(3);
        formData.add(new BasicNameValuePair("image", "base64EncodedString"));

        HttpPost httpPost = new HttpPost(urls[0]);
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(formData, HTTP.UTF_8));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        HttpClient httpClient = new DefaultHttpClient();
        HttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);

            WebView browser = (WebView) findViewById(R.id.my_web_engine);
            browser.setWebChromeClient(new MyWebChromeClient());
            browser.setWebViewClient(new MyWebViewClient());

            try{
                String data = new BasicResponseHandler().handleResponse(response);
                browser.loadDataWithBaseURL(urls[0], data, "text/html", HTTP.UTF_8, null);
            } catch (IOException e) {
                e.printStackTrace();
        }

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

        return response;
    }

    @Override
    protected void onPostExecute(HttpResponse response) {
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            String responseBody = null;
            try {
                responseBody = EntityUtils.toString(response.getEntity());
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (responseBody.equalsIgnoreCase("OK"))
                Log.w("myApp", "Everything is OK");
            else
                Log.w("myApp", "Something is wrong");
        }
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if (type.startsWith("image/")) {
                    // for simplicity skipped image encoding to base64
                    String url = getResources().getString(R.string.url) + "/MyController/ImageUpload";
                    Context context = ImageUploadActivity.this;
                    tryUpload(url, context);
            }
        }
    }
}
视图
包含以下行:

“/>

当我删除
[HttpPost]
时,加载视图时不会出现问题,但不会显示图像

但是当我离开时,我得到了一个例外

org.apache.http.client.HttpResponseException:未找到

在以下行中:

String data=new BasicResponseHandler().handleResponse(响应);


有人知道我做错了什么吗?

你只应该在onPostExecute中对你的WebView做些什么。你应该在那里加载响应。请在loadDataWithBaseURL()中显示你提供的源/数据。@greenapps url[0]=”“我不知道“数据”中应该包含什么数据变量,因为它抛出一个错误
org.apache.http.client.HttpResponseException:notfound
。似乎它试图找到一个适当的操作,该操作处理HTTP Post,并且只有一个参数-image,但由于某种原因,它找不到它。可能是因为它不携带参数,并且无法找到没有参数的操作。这只是一个很长的机会。@greenapps只是出于好奇,我又添加了一个同名的动作,但没有任何参数。它成功了。视图毫无例外地打开了。这意味着,出于某种原因,loadDataWithBaseURL()不携带post参数:(另请注意,还删除了操作的
[HttpPost]
属性,否则它将不起作用。@greenapps在移动
response=httpClient.execute(HttpPost)之后的代码部分;
对于onPostExecute方法,我在
String data=new BasicResponseHandler().handleResponse(响应)中获得
致命异常:main android.os.NetworkOnMainThreadException
行。有什么建议吗?当然会有例外。
String data=new Basi…
应该保留在doon background中。将其更改为
data=new Basi…
并将
String data;
作为任务的私有变量。
// temporary removed authorization
[HttpPost]
public ActionResult ImageUpload(string image)
{
    // skipped some lines
    ViewData.Add("imageFromWebView", image);
    return View();
}