GVKun编程网logo

HttpClient不支持PostAsJsonAsync方法C#(不支持http协议)

19

对于HttpClient不支持PostAsJsonAsync方法C#感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍不支持http协议,并为您提供关于Android中的AsyncHttpClie

对于HttpClient不支持PostAsJsonAsync方法C#感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍不支持http协议,并为您提供关于Android 中的 AsyncHttpClient 框架下怎么更新后台 json 数据?、android----AsyncHttpClient的get,post和图片上传、android-async-http AsyncHttpClient介绍、Android中的asynchttpclient框架post成功后无法执行list.add方法的有用信息。

本文目录一览:

HttpClient不支持PostAsJsonAsync方法C#(不支持http协议)

HttpClient不支持PostAsJsonAsync方法C#(不支持http协议)

我正在尝试从Web应用程序调用Web API。我正在使用.Net
4.5,并且在编写代码时遇到的错误HttpClient不包含定义PostAsJsonAsync方法。

下面是代码:

HttpClient client = new HttpClient();client.BaseAddress = new Uri("http://localhost:51093/");client.DefaultRequestHeaders.Accept.Add(   new MediaTypeWithQualityHeaderValue("application/json"));var user = new Users();user.AgentCode = 100;user.Remarks = "Test";user.CollectionDate = System.DateTime.Today;user.RemittanceDate = System.DateTime.Today;user.TotalAmount = 1000;user.OrgBranchID = 101;var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

我收到错误消息:

错误:“ System.Net.Http.HttpClient”不包含“ PostAsJsonAsync”的定义,并且找不到扩展方法“
PostAsJsonAsync”接受类型为“ System.Net.Http.HttpClient”的第一个参数(您是否缺少使用指令还是程序集引用?)

请看看并给我建议。

答案1

小编典典

是的,您需要添加一个参考

System.Net.Http.Formatting.dll

可以在扩展程序集区域中找到。

实现此目的的一种好方法是将NuGet包Microsoft.AspNet.WebApi.Client添加到您的项目中。

Android 中的 AsyncHttpClient 框架下怎么更新后台 json 数据?

Android 中的 AsyncHttpClient 框架下怎么更新后台 json 数据?

RequestParams params=new RequestParams()
params.put("sessionID", AppUtil.getUserVo().getSessionID())
params.put("info", getResources().getString(R.string.hremployee));

public void baseInfo(Context context,RequestParams params, final HttpUtil.ReponseCallback<EmpVo> callback){
    HttpUtil.get(context,spellUrl(baseInfo_url), params, new TextHttpResponseHandler() { @Override  public void onFailure(int i, Header[] headers, String s, Throwable throwable) { callback.onFailure(s,throwable);  } @Override  public void onSuccess(int i, Header[] headers, String s) {
            EmpVo empVo = parseJsonToEmpVo(s);  callback.onSuccess(empVo);  }
    }); }

大家请看上面一段,先构造了 params,然后根据公司后台给的 handler/EmpInfo.ashx 接口,通过返回的数据传入 asynschttp 框架的 success 方法去处理了 empVo

private EmpVo parseJsonToEmpVo(String result){
    EmpVo empVo=null;  try {
        JSONObject obj=new JSONObject(result);  int ret=obj.getInt("result");  if(ret==0){ //LogUtil.d(TAG,obj.getString("HREmployee").toString());  empVo=gson.fromJson(obj.getString("HREmployee"),type_empVo);  }
    } catch (JSONException e) {
        e.printStackTrace();  } return empVo; }
然后这样就得到了 empVo 了。

现在问题来了!!!我需要 update 员工表 (emp),代码应该怎么写?用 asynschttp 的 post 方法吗?那参数怎么传进去?

请看下图


这张是在后台那边拍过来的,因为第一次写公司的代码,不知道怎么下手。上面的 postempinfo 就是接口了,然后有个 req.inForm 的方法,下面是返回的一堆 emp 的数据...

android----AsyncHttpClient的get,post和图片上传

android----AsyncHttpClient的get,post和图片上传

async-http-client库是一个基于回调函数的Http异步通信客户端Android组件,是在Apache的HttpClient库的基础上开发构建而成的。

 

Eclipse使用:导入android-async-http-1.4.4.jar 包, 点击下载

AndroidStudio: gradle中引入 compile ''com.loopj.android:android-async-http:1.4.8''

 

功能特色

  • 利用版4.3.6上游HttpClient代替Android提供defaulthttpclient
  • 兼容AndroidAPI 23高
  • 做异步HTTP请求处理的响应匿名回调
  • HTTP请求发生UI线程之外
  • 请求使用线程池限制并发资源使用情况
  • get /后参数生成器( RequestParams )
  • 多文件上传没有额外的第三方库
  • JSON上传流没有额外的图书馆
  • 处理循环和相对重定向
  • 小的开销给你的应用程序只90kb一切
  • 自动智能请求重试次数质量不一的移动连接优化
  • 自动gzip响应解码速度超快的请求支持
  • 二进制协议通信binaryhttpresponsehandler
  • 内置的响应分析JSON与jsonhttpresponsehandler
  • 节能反应直接进入文件fileasynchttpresponsehandler
  • 大的持久性Cookie,保存cookie到你的应用程序的SharedPreferences
  • 杰克逊JSON集成,gson或其他JSON序列化库(德)basejsonhttpresponsehandler
  • 与SAX解析器支持saxasynchttpresponsehandler
  • 语言和内容编码的支持,不仅仅是UTF-8

 

效果图:

    

 

public class MainActivity extends Activity implements OnClickListener {

	public static AsyncHttpClient mHttpc = new AsyncHttpClient();

	private TextView mTextView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_asynchttpclict);
		initView();
	}

	private void initView() {
		findViewById(R.id.btn1).setOnClickListener(this);
		findViewById(R.id.btn2).setOnClickListener(this);
		findViewById(R.id.btn3).setOnClickListener(this);
		findViewById(R.id.btn4).setOnClickListener(this);
		mTextView=(TextView) findViewById(R.id.Text);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn1:
			showHttpGet1();
			break;
		case R.id.btn2:
			showHttpGet2("https://www.baidu.com");
			break;
		case R.id.btn3:
			showHttpGet3();
			break;
		case R.id.btn4:
			showHttpPost();
			break;
		case R.id.btn5:
			
		case R.id.btn6:
			
		default:
			break;
		}

	}

	private void showHttpGet1() {
		AsyncHttpClient client = new AsyncHttpClient();
		client.get("https://www.baidu.com", new AsyncHttpResponseHandler() {
			@Override
			public void onStart() { // 请求启动 请求前
			}

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) { // 请求成功
				StringBuffer result = new StringBuffer("");
				int length = responseBody.length;
				for (int i = 0; i < length; i++) {
					result.append((char) (responseBody[i] & 0xff));
				}
				Toast.makeText(MainActivity.this, "结果:" + result.toString(), 2)
						.show();
				mTextView.setText("结果:" +result.toString());
			}

			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable error) // 请求失败
			{

			}

			public void onRetry() { // 重试

			}

			@Override
			public void onProgress(int bytesWritten, int totalSize) { // 请求进度

			}

			@Override
			public void onFinish() { // 请求完成

			}
		});
	}

	public void showHttpGet2(String uri) {
		mHttpc.get(uri, null, new AsyncHttpResponseHandler() { // 请求失败
					@Override
					public void onFailure(int arg0, Header[] arg1, byte[] arg2,
							Throwable arg3) {
					}

					@Override
					public void onSuccess(int arg0, Header[] arg1,
							byte[] responseBody) {
						StringBuffer result = new StringBuffer("");
						int length = responseBody.length;
						for (int i = 0; i < length; i++) {
							result.append((char) (responseBody[i] & 0xff));
						}
						Toast.makeText(MainActivity.this,
								"结果:" + result.toString(), 2).show();
						mTextView.setText("结果:" +result.toString());
					}
				});
	}

	private void showHttpGet3() {
		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("q", "test");
		params.put("showapi_appid", "11548");
		// 当前时间
		params.put("showapi_timestamp", "20160511151954");
		params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		client.get("https://route.showapi.com/32-9", params,
				new TextHttpResponseHandler() {
					@Override
					public void onSuccess(int statusCode, Header[] headers,
							String response) {
						Toast.makeText(MainActivity.this,
								"结果:" + response.toString(), 2).show();
						mTextView.setText("结果:" +response.toString());
					}

					@Override
					public void onFailure(int statusCode, Header[] headers,
							String responseBody, Throwable error) {
						Log.i("ERROR", error.toString());
					}
				});
	}

	/*
	 * 获得字符串
	 */
	public void showHttpPost() {
		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("q", "test");
		params.put("showapi_appid", "11548");
		// 当前时间
		params.put("showapi_timestamp", "20160511151954");
		params.put("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		client.post("https://route.showapi.com/32-9", params,
				new AsyncHttpResponseHandler() {

					@Override
					public void onFailure(int arg0, Header[] arg1,
							byte[] responseBody, Throwable arg3) {

					}

					@Override
					public void onSuccess(int arg0, Header[] arg1,
							byte[] responseBody) {
						StringBuffer result = new StringBuffer("");
						int length = responseBody.length;
						for (int i = 0; i < length; i++) {
							result.append((char) (responseBody[i] & 0xff));
						}
						Toast.makeText(MainActivity.this,
								"结果:" + result.toString(), 2).show();
						mTextView.setText("结果:" +result.toString());
					}
				});

	}

	

	/**
	 * 上传单个文件
	 */
	private void showFile() {
		File myFile = new File("filePath");// filePath--->文件路径
		RequestParams params = new RequestParams();
		try {
			params.put("time", "20160511151954");
			params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
			params.put("filename", myFile);
			AsyncHttpClient client = new AsyncHttpClient();
			client.post("url", params, new AsyncHttpResponseHandler() {

				@Override
				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
						Throwable arg3) {

				}

				@Override
				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {

				}
			});
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	/***
	 * 多个文件上传
	 * 
	 * @param sendFilesPath
	 */
	public void uploadFile(ArrayList<String> sendFilesPath) {
		if (sendFilesPath.size() == 0)
			return;

		String strUploadFile = "";
		AsyncHttpClient client = new AsyncHttpClient();
		client.setURLEncodingEnabled(false);

		RequestParams params = new RequestParams();
		params.put("time", "20160511151954");
		params.put("sign", "bb1d15ab7ce646ec87cc89d684ca4bcb");
		// 批量上传
		for (int i = 0; i < sendFilesPath.size(); i++) {
			File myFile = new File(sendFilesPath.get(i));
			try {
				params.put(myFile.getName(), myFile);
			} catch (FileNotFoundException e1) {
				continue;
			}
		}

		client.setTimeout(10000);
		client.post(strUploadFile, params, new AsyncHttpResponseHandler() {

			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable arg3) {
				Log.i("Show", "上传失败");
			}

			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) {
				Log.i("Show", "上传成功");
			}

			@Override
			public void onProgress(int bytesWritten, int totalSize) {
				super.onProgress(bytesWritten, totalSize);
				int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
				// 上传进度显示
				Log.i("Show", "上传进度显示:" + count);
				
			}

			@Override
			public void onRetry(int retryNo) {
				super.onRetry(retryNo);
				// 返回重试次数
			}
		});
	}

}

记得加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

 

源码点击下载:https://github.com/DickyQie/android-network-request

android-async-http AsyncHttpClient介绍

android-async-http AsyncHttpClient介绍

前一阵子刚搬了家,加上公司要发新版本,所以一直比较忙,文章也好几周没更新了。难得这个周末有空,正好周内偶然间闲逛
 
发现这个很不错的第三方开源类库,针对 Android开发中发送http请求的。
 
  在Android开发中,发送、处理http请求简直太常见了,以至于我们的代码里到处充斥着各种HttpClient和与之相关又臭又长的代码,
 
它们存在于你代码的各个角落,每次看见都令人作呕,而你仅仅是为了server能返回一个string或者json给你。每次当我自己写这样
 
的代码时,我都会想能不能简化下这个流程,可能2、3行代码就能搞定。因为针对最简单的case,我只需要提供request url,成功时的
 
callback和(或)失败时的callback,仅此而已。针对这一类问题(需求),可以说android-async-http提供了几乎完美的解决方案。
 
通过使用它可以大大简化你的代码,不仅如此,你的代码看上去也优雅多了。
 
  当我第一眼看到它时就被吸引住了,特别是async关键字,干我们这行的都知道,这是异步执行,也就是说它的网络请求自动在非UI
 
线程里执行,你不需要任何额外的操作(比如手动new一个Thread之类)。项目的官方网站:
 
http://loopj.com/android-async-http/,对应的github地址:https://github.com/loopj/android-async-http
 
  我这里简要介绍下:它是专门针对Android在Apache的HttpClient基础上构建的异步的callback-based http client。所有的请求
 
全在UI线程之外发生,而callback发生在创建它的线程中,应用了Android的Handler发送消息机制。你也可以把AsyncHttpClient应用在
 
Service中或者后台线程中,库代码会自动识别出它所运行的context。它的feature包括:
 
1. 发送异步http请求,在匿名callback对象中处理response;
 
2. http请求发生在UI线程之外;
 
3. 内部采用线程池来处理并发请求;
 
4. GET/POST 参数构造,通过RequestParams类。
 
5. 内置多部分文件上传,不需要第三方库支持;
 
6. 流式Json上传,不需要额外的库;
 
7. 能处理环行和相对重定向;
 
8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
 
9. 自动智能的请求重试机制在各种各样的移动连接环境中;
 
10. 自动的gzip响应解码;
 
11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
 
12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
 
13. 通过BaseJsonHttpResponseHandler和各种json库集成;
 
14. 支持SAX解析器;
 
15. 支持各种语言和content编码,不仅仅是UTF-8。
 
大概翻译了下,这些只是大体的概览,具体的细节还得在使用过程中慢慢感受、学习。
 
  接下来,带领大家看看应用android-async-http来写代码是个啥样子。简单来说你只需要3步,
 
1. 创建一个AsyncHttpClient;
 
2. (可选的)通过RequestParams对象设置请求参数;
 
3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类
 
,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。
 
来看看代码如何写:
 
复制代码
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
 
    @Override
    public void onStart() {
        // called before request is started
    }
 
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        // called when response HTTP status is "200 OK"
    }
 
    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        // called when response HTTP status is "4XX" (eg. 401, 403, 404)
    }
 
    @Override
    public void onRetry(int retryNo) {
        // called when request is retried
    }
});
复制代码
是不是很简洁,有没有被震撼到?反正我自己第一次看到的时候有种相见恨晚的感觉,这简直就是我日思夜想的方式啊!这里你只需要通过
 
匿名内部类的方式实现AsyncHttpResponseHandler,而且更棒的是你只需要override感兴趣的方法,比如一般都是onSuccess和onFailure。
 
这个版本的get方法没有为请求传递任何参数,当然你也可以通过RequestParams来传递各种参数,如下:
 
复制代码
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.get("http://www.google.com", params, new
    AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] response) {
            System.out.println(response);
        }
 
        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            Log.d("ERROR", error);
        }    
    }
);
复制代码
以上的例子是返回的response直接是原生字节流的情况,如果你需要把返回的结果当一个String对待,这时只需要匿名实现一个
 
TextHttpResponseHandler就行,其继承自AsyncHttpResponse,并将原生的字节流根据指定的encoding转化成了string对象,
 
代码如下:
 
复制代码
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", "value");
params.put("more", "data");
client.get("http://www.google.com", params, new
    TextHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, String response) {
            System.out.println(response);
        }
 
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) {
            Log.d("ERROR", error);
        }    
    }
);
复制代码
同样的方式,你可以发送json请求,代码如下:
 
复制代码
String url = "https://ajax.googleapis.com/ajax/services/search/images";
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("q", "android");
params.put("rsz", "8");
client.get(url, params, new JsonHttpResponseHandler() {            
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
       // Handle resulting parsed JSON response here
    }
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
      // Handle resulting parsed JSON response here
    }
});
复制代码
看到了没,返回的response已经自动转化成JSONObject了,当然也支持JSONArray类型,override你需要的那个版本就行。

Android中的asynchttpclient框架post成功后无法执行list.add方法

Android中的asynchttpclient框架post成功后无法执行list.add方法


成功执行post方法后成功后,返回了json,通过解析json得到了一个数组,我希望在success回调中执行list.add方法,报错了。请问 如何取出success中的数据,或者在success中new一个对象??

ps:logcat没有报错,空白的一片无法显示。
因为在ONsuccess的方法中给菜单添加对象(List.add**),可是到了方法块外就无法识别(List.get**)

我们今天的关于HttpClient不支持PostAsJsonAsync方法C#不支持http协议的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android 中的 AsyncHttpClient 框架下怎么更新后台 json 数据?、android----AsyncHttpClient的get,post和图片上传、android-async-http AsyncHttpClient介绍、Android中的asynchttpclient框架post成功后无法执行list.add方法的相关信息,请在本站查询。

本文标签: