① android中采用retrofit
文件里面作如下配置:StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
② android retrofit 2.0 怎么同时上传多张
/** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody imgs);
③ 怎么解决retrofit上传文件导致内存不足
保存文件,重要的备份。然后查看资源管理器,干掉内存大的,或者重启。
④ android retrofit2 怎么传file
AndroidFileTransfer.dmg是mac上的android手机文件管理器,导入导出文件很实用,是用在mac系统中的。
⑤ android retrofit上传二进制流 byte[] img
以下是图片上传方式:接口写法:java code?123 @Multipart @POST("/user/addLicenseInfo") void addLicenseInfo(@QueryMap Map<String, Object> options, @Part("file") TypedFile file, Callback<jsonElement> response);实现写法:Java code?12345 API api = mRegisterActivity.createAPI(); Map<String, Object> options = new HashMap<String, Object>(); options.put("mobile",photoNumber); TypedFile typedImage = new TypedFile(getMIMEType(pictureFile), pictureFile); api.addLicenseInfo(options,typedImage,new Callback<JsonEleme
⑥ retrofit怎么在android studio中使用
参考如下内容:环境要求Android 2.3及以上版本 Java 6及以上版本配置GRADLE配置文件下添加引用?1234567 <code class="hljs r">dependencies { … compile 'com.squareup.retrofit:retrofit:1.9.0' …}</code>当OkHttp存在时,Retrofit会使用OkHttp来进行网络请求,使用OkHttp的添加引用如下?123456 <code class="hljs r">dependencies { …compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'compile 'com.squareup.okhttp:okhttp:2.0.0' …}</code>发起请求下面的例子是使用Retrofit进行一次简单的异步GET请求,返回的值为String类型首先定义一个接口,在接口中声明一个方法来定义请求的相关内容?12345 <code class="hljs d"> interface User { @GET("/user/list.json") void getUsers(@Query("pagesize") int pagesize, Callback<string> callback); }</string></code>@GET表明该请求为GET方式,除此之外还有@POST, @PUT, @DELETE, 和@HEAD,具体的作用请参考官方文档,由于篇幅原因,这里不再叙述。@Query为参数声明Callback< String > 为回调接口,String表明返回数据结果就为String类型然后创建一个RestAdapter对象,代码如下?123 <code class="hljs avrasm">RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(CTX).setConverter(new BaseConverter()) .build();</code>setEndpoint方法指定了请求地址的前半部分,即服务器地址,如 https://api.github.comsetConverter方法需要一个转换接口的实现类作为参数,该类的作用是将请求得到的InputStream转换为想要的类型,示例代码如下?1234567891011121314151617181920212223242526272829303132333435363738394041424344 <code class="hljs java">public class BaseConverter implements Converter { @Override public Object fromBody(TypedInput body, Type type) throws ConversionException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int i = -1; String response = ""; try { while ((i = body.in().read()) != -1) { baos.write(i); } response = baos.toString(); baos.close(); } catch (IOException e) { e.printStackTrace(); } return response; } @Override public TypedOutput toBody(final Object object) { return new TypedOutput() { @Override public String fileName() { return null; } @Override public String mimeType() { return "String"; } @Override public long length() { return object == null ? 0 : object.toString().length(); } @Override public void writeTo(OutputStream out) throws IOException { out.write(object.toString().getBytes()); } }; }}</code>当得到了一个restAdapter 对象后,调用restAdapter的create方法得到User接口的实现类?1234567891011121314 <code class="hljs java"> Callback<string> callback = new Callback<string>() { @Override public void success(String s, Response response) { } @Override public void failure(RetrofitError error) { } } User user = getAdapter().create(User.class); //指定请求参数和回调接口的实现类 user.getUsers(12,callback);</string></string></code>Retrofit的强大之处就在于此,它会给根据接口的方法注解来实现该接口代码混淆如果需要进行代码混淆,配置如下
⑦ okhttp,retrofit,android-async-http,volley应该选择哪一个
个人认为okhttp是android平台最好的网络库。volley是一个简单的异步http库,仅此而已。缺点是不支持同步,这点会限制开发模式;不能post大数据,所以不适合用来上传文件。android-async-http,与volley一样是异步网络库。但volley是封装的httpUrlConnection,它是封装的httpClient,而android平台不推荐用HttpClient了,所以这个库已经不适合android平台了。okhttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。picasso就是利用okhttp的缓存机制实现其文件缓存,实现的很优雅,很正确,反例就是UIL(universal image loader),自己做的文件缓存,而且不遵守http缓存机制。retrofit与picasso一样都是在okhttp基础之上做的封装,项目中可以直接用了。另外AndroidAsync这个网络库使用了nio的方式实现的。okhttp没有提供nio的方式,不过nio更适合大量连接的情况,对于移动平台有点杀鸡用牛刀的味道。picasso、uil都不支持inbitmap,项目中有用到picasso的富图片应用需要注意这点。
⑧ retrofit可以上传大文件吗
1.单张图片的上传?12345678910 /** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody imgs);2.多张图片的上传?1234567891011121314 /** * 上传三张图片 * @param description * @param imgs * @param imgs1 * @param imgs3 * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody imgs, @Part("file\"; filename=\"image.png\"")RequestBody imgs1, @Part("file\"; filename=\"image.png\"")RequestBody imgs3);注意:目前是提供传3张,要想多上传目前我发现的方法就是想要多传一张,就多增加一个参数@Part("file\"; filename=\"image.png\"")RequestBody imgs,以此类推。大家看到上面觉得写法很漏,但是用于能力有限,只能想到这样。用Java中的可变参数解决之后,就只能传一张。不能多张。?1234 @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody …imgs);调用:Call<String> call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null); 这样写看上去很是高端,不幸的是只能传一张3.最后是实现胡过程3.1创建FileUploadService接口?123456789101112131415161718192021222324252627 public interface FileUploadService { /** * 上传一张图片 * @param description * @param imgs * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody imgs); /** * 上传三张图片 * @param description * @param imgs * @param imgs1 * @param imgs3 * @return */ @Multipart @POST("/upload") Call<String> uploadImage(@Part("fileName") String description, @Part("file\"; filename=\"image.png\"")RequestBody imgs, @Part("file\"; filename=\"image.png\"")RequestBody imgs1, @Part("file\"; filename=\"image.png\"")RequestBody imgs3);}3.2创建Retrofit对象?1234567 private static final Retrofit sRetrofit = new Retrofit .Builder() .baseUrl(ENDPOINT) .addConverterFactory(GsonConverterFactory.create())// .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作为回调适配器 .build(); private static final FileUploadService apiManager = sRetrofit.create(FileUploadService.class);3.3调用上传的方法?12345678910111213141516171819202122232425262728293031323334 public static void upload(String path){ String descriptionString = "hello, this is description speaking"; String[] m = new String[2]; m[0]= "share.png"; m[1]= "Screenshot_20160128-140709.png"; File[] ssssss= new File[2]; File file1 = new File("/storage/emulated/0/sc/share.png"); File file = new File("/storage/emulated/0/Pictures/ScreenShots/Screenshot_20160128-140709.png"); ssssss[0]=file; ssssss[0]=file1; RequestBody requestBody[] = new RequestBody[3]; RequestBody requestBody1 = RequestBody.create(MediaType.parse("multipart/form-data"), file); RequestBody requestBody2 = RequestBody.create(MediaType.parse("multipart/form-data"), file1); requestBody[0]=requestBody1; requestBody[1]=requestBody2; Call<String> call = apiManager.uploadImage( m[0],requestBody1,requestBody2,null); call.enqueue(new Callback<String>() { @Override public void onResponse(Response<String> response, Retrofit retrofit) { Log.v("Upload", response.message()); Log.v("Upload", "success"); } @Override public void onFailure(Throwable t) { Log.e("Upload", t.toString()); } }); }4.服务器段代码:服务器用的是struts接收:@Controllerpublic class GetToken extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private File[] file; private String[] fileName; public File[] getFile() { return file; } public void setFile(File[] file) { this.file = file; } public String[] getFileName() { return fileName; } public void setFileName(String[] fileName) { this.fileName = fileName; } @Action("/upload") public void login() { System.out.println("——"+Arrays.toString(file)); System.out.println("——"+Arrays.toString(fileName)); }}
⑨ retrofit 怎么设置长连接 文件类型
Http上传需要用到multipart/form-data请求方式,Http协议原始方法不支持multipart/form-data请求,那这个请求自然就是由原始的请求方法拼装而成,具体规则如下:1、multipart/form-data的本质上还是Post请求2、multipart/form-data与post方法的不同之处:请求头,请求体。3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。4、multipart/form-data的请求体也是一个字符串,不过和post的请求体不同的是它的构造方式,post是简单的name=value值连接,而multipart/form-data则是添加了分隔符等内容的构造体。
⑩ retrofit文件上传怎么post
文件里面作如下配置:StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());