yanzhenjie / nohttp Goto Github PK
View Code? Open in Web Editor NEW:lemon: Android实现Http标准协议框架,支持多种缓存模式,底层可动态切换OkHttp、URLConnection。
Home Page: https://github.com/yanzhenjie/NoHttp
License: Apache License 2.0
:lemon: Android实现Http标准协议框架,支持多种缓存模式,底层可动态切换OkHttp、URLConnection。
Home Page: https://github.com/yanzhenjie/NoHttp
License: Apache License 2.0
已测试,确实存在上传无法取消的问题,复现方法很简单,只需在sample项目中的上传代码中增加取消下载功能即可,经测试,在上传过程中,调用Request.cancle(),Request.cancelBySign(),RequestQueue.cancelBySign()以及RequestQueue.cancelAll()均无法停止上传,OnUploadListener中的回调方法依然会被调用,跪求 @Y0Landa 大神解决。测试系统为Android5.1.1,测试设备为Google Nexus 9。
如何获取cookie?
页面上只有一个下载进度条,如果有多个文件需要下载,如何控制下载总进度的显示?
另外,没找到断点下载的代码,sample里面的使用,是否支持了断点下载?
可以提供一下混淆规则吗
使用nohttp,如何将网络请求单独写在一个类里面,然后回调到对应的activity或fragment里面
前排
開發者大大您好,我想上傳多個檔案,以下是我的部分代碼
File file1 = new File(Environment.getExternalStorageDirectory().getPath()+"/xxx.txt");
File file2 = new File(Environment.getExternalStorageDirectory().getPath()+"/yyy.txt");
BasicBinary binary1 = new FileBinary(file1);
BasicBinary binary2 = new FileBinary(file2);
request.add("file", binary1);
request.add("file", binary2);
requestQueue.add(NOHTTP_WHAT_TEST, request, onResponseListener);
php端接收:
600 * 1024){ echo "file size invalid, size > 600kb"; }else{ //如果出错就输出错误信息 if($_FILES["file"]["error"] > 0){ echo "upload file error !"; }else{ //没有错误,就拷贝上传的文件到指定的目录 $name = $_FILES["file"]["name"]; $dir = "upload/"; //如果目录不存在,就创建 if(!file_exists($dir)){ mkdir("upload/"); } //判断文件是否已存在 if(file_exists("upload/" . $name)){ echo "file exist"; }else{ //指定目录下不存在文件,则拷贝文件 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "upload file complete"; } } } ``` ?>上傳之後只會有 yyy.txt ,xxx.txt好像不會被上傳,是哪邊代碼有少打嗎?
還請大神賜教。
開發者大大您好,傳入資料的時候,我想用JsonObject,但是在request.add( object );的時候,好像只能add字串,不能add(jsonObject)嗎?
因為在後台php程式碼裡面,我想把傳入的json解析,這樣實作上比較方便。
JSONObject object = new JSONObject();
try
{
object.put("member_account","test");
object.put("member_password","test");
object.put("member_email","[email protected]");
}
catch(JSONException e)
{
e.printStackTrace();
}
request.add( object );
求大神暴露个拿缓存的方法,在网络不好的情况下能先拿到缓存去用。
菜鸟一个,sample里面的那个RecyerlViewAdapter的封装看不明白,可以给稍微讲一讲吗,谢谢
NoHttp的请求在请求队列里面,可以设置优先级吗?
达哥 最近看了nohttp的源码 我怎么感觉你的架构 和Volley的架构很相似 是不是你在开发的时候 参考了Volley的东西
session保持的机制是什么,失效了怎么处理?
只看到了这个,还是不明白怎么用哎。。。
支持Session、Cookie的自动维持,App重启、关开机后还持续维持。
我首次使用该框架,按照网上的教程写了个简单的发送get的请求,在运行时报错才知道需要先在Application中先初始化,然而几乎在所有的教程中都没有写明这个一点,希望作者能加上,免得下次新手在使用的过程中才发现需要先初始化
个人偏好用String来标识当前是哪一个接口的请求,有时候选择用接口名来标识当前是哪一个接口的请求,但目前粗略的看到你这里只是一个int型。粗略的考虑了,int型在区别哪一个接口时,还得特意为它定义变量才行。。
是否,有用String作为标识的重载方法?
java.net.SocketException: sendto failed: EPIPE (Broken pipe)
at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:546)
at libcore.io.IoBridge.sendto(IoBridge.java:515)
at java.net.PlainSocketImpl.write(PlainSocketImpl.java:504)
at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:266)
at okio.Okio$1.write(Okio.java:78)
...
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:818)
sendto failed: EPIPE (Broken pipe)
,swankjesse的回答:That's working as designed. Sometimes you lose network connectivity.
Please see here: square/okhttp#1775
response.isSucceed()这个方法好像并不能用来判断请求是否成功啊. 我试了, 明明状态已经是404了, response.isSucceed()返回的却是true, 我觉得应该根据code是否在200到300之间来判断是否是success
1.如何用NoHttp实现多图片上传?2.如何设置框架的请求超时时间?
你好,请问下nohttp是基于soket通讯的吗?可以用于soket请求吗?可以传报文格式吗?
您好,目标网页是gbk编码的,用get方法获取网页内容,在succeed里取出中文的时候乱码,请问怎么解决呢?
public void onSucceed(int what, Response<String> response) {
String result = response.get()
TextView tvRet = (TextView) findViewById(R.id.tvRet);
tvRet.setText(result);
}
在daemon中看到实现了一个接口HttpListener, 但是在nohttp源码中看到有OnResponseListener, 为什么不直接用OnResponseListener? 这样有什么好处吗?
你好,我在你的demo的单个文件下载界面修改了一下,我要多个url顺序下载,我先把这些url创建DownloadRequest并保存到list里面,然后一个下载完成后就进行下一个下载,但是当我点击暂停时,就不能恢复下载了,我debug发现好像在点cancel的时候,blockquene没有把这个移除掉。希望帮忙确认一下是什么问题,谢谢。
希望作者可以说一下下载文件的关键代码在哪个文件啊,
源码中没有分包的文件,作者是故意不分包的吗?看着有点乱啊
RestRequest 有bug
RequestQueue
的获取弄成单例了,但是这样是不是并发请求数就固定了,如果有特殊需要,还要自己再获取另一个可以指定并发请求数的 RequestQueue
呢?StartActivity
退出时执行了三步操作:先取消所有请求,然后停止所有请求队列,最后杀死进程,请问这样是必要的也必须按照这个顺序来吗?怎么没有CallServer这个方法?
CallServer.getDownloadInstance().add(0, downloadRequest, downloadListener);
CallServer 报错
request.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
这个缓存缓存时间吗
public boolean allowRequestBody() {
boolean allowRequestBody = this == POST || this == PUT || this == PATCH || this == DELETE;
if (Build.VERSION.SDK_INT < AndroidVersion.LOLLIPOP)
allowRequestBody = allowRequestBody && this != DELETE;
return allowRequestBody;
}
目前在安卓6.0上delete方法服务器端拿不到参数,最终追到这里,不知道版主这个方法为什么这样写
显示每个文件的进度,可以让未上传的出去等待状态
现在业务上要求除了获取返回码外,还需要对服务端错误内容进行分析,现在无法获取服务端错误信息内容。
没办法吗?大文件上传都这样吗,试了很多种方法,都慢
如果可以的话最好能在文档中说明吧
一直没有找到这块,不知道是不是需要自己在此封装
因为在客户端请求的时候 经常会有参数是动态的!okhttp默认是url+参数 md5生产的key!造成带动态参数的缓存就没有意义了!
get请求下载的时候出现下载的Zip包不完整
添加到队列
RequestQueue requestQueue = NoHttp.newRequestQueue();
// 或者传一个并发值,允许三个请求同时并发
// RequestQueue requestQueue = NoHttp.newRequestQueue(3);// 发起请求
requestQueue.add(what, request, responseListener);
上面添加到队列时有一个what,这个what会在responseLisetener响应时回调给开发者,所以我们可以用一个responseLisetener接受多个请求的响应,用what来区分结果。而不用像有的框架一样,每一个请求都要new一个回调。
这个而不用像有的框架一样,每一个请求都要new一个回调。
我觉得还是每次请求都new 一个比较好。
这样不得把很多request 结果处理写到一个listener里头啊
能不能帮忙实现下断点上传文件的,不是断点下载
android 6.0 RequestQueue 去 start() 一个 stringRequest 时,报thread interrupted无法连接上网络,能帮忙分析一下错误吗?
java.io.InterruptedIOException: thread interrupted
at com.android.okhttp.okio.Timeout.throwIfReached(Timeout.java:145)
at com.android.okhttp.okio.Okio$1.write(Okio.java:73)
at com.android.okhttp.okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at com.android.okhttp.okio.RealBufferedSink.flush(RealBufferedSink.java:221)
at com.android.okhttp.internal.http.HttpConnection.flush(HttpConnection.java:141)
at com.android.okhttp.internal.http.HttpTransport.finishRequest(HttpTransport.java:52)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:903)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:789)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)
at com.yolanda.nohttp.BasicConnection.getConnection(BasicConnection.java:88)
at com.yolanda.nohttp.rest.HttpRestConnection.sendRequestHandleRetry(HttpRestConnection.java:135)
at com.yolanda.nohttp.rest.HttpRestConnection.requestNetwork(HttpRestConnection.java:84)
at com.yolanda.nohttp.rest.HttpRestParser.parserRequest(HttpRestParser.java:51)
at com.yolanda.nohttp.rest.RequestDispatcher.run(RequestDispatcher.java:101)
比如超时、网络错误等情况,我需要在 APP 中针对每种情况进行处理。请问如何能获取 nohttp 中这类错误消息?
NoHttp是基于什么的?HttpUrlConnection、HttpClient、OkHttp?谢谢
android studio 为什么不能直接添加依赖,我搜索不到nohttp
对于Status Code 为 302 的这类访问,会自动转向目标URL,但是我只想要当前URL的Cookie这个怎么解决。
比如放问AURL,Status Code为302 跳转到BURL,但是我只想要AURL响应头里的Cookie。
求解决 谢谢!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.