小编BNK*_*BNK的帖子

使用Volley和没有HttpEntity工作POST多部分请求

这不是一个真正的问题,但是,我想在这里分享一些我的工作代码供您参考.

据我们所知,HttpEntityAPI22已弃用,自API23以来已完全删除.目前,我们无法再访问Android Developer上的HttpEntity Reference(404).因此,以下是我使用Volley和没有HttpEntity的POST多部分请求的工作示例代码.它正在运行,经过测试Asp.Net Web API.当然,代码可能只是发布两个现有可绘制文件的基本示例,也不是所有情况下的最佳解决方案,也不是很好的调优.

MultipartActivity.java:

package com.example.multipartvolley;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.VolleyError;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;


public class MultipartActivity extends Activity {

    private final Context context = this;
    private final String twoHyphens = "--";
    private final String lineEnd = "\r\n";
    private final String boundary = …
Run Code Online (Sandbox Code Playgroud)

java android asp.net-web-api android-volley httpentity

103
推荐指数
3
解决办法
7万
查看次数

使用Firebase身份验证进行身份验证后检索Google Access令牌

我正在尝试从经过身份验证的用户(使用Firebase身份验证)检索Google Access令牌以访问Google REST API,例如YouTube Data API.

我已经在Firebase-UI for Android - Auth库的帮助下成功地在我的应用中集成了Google登录.从FirebaseUser.getToken()方法检索的令牌不是REST API的有效Google Access令牌.

user.getToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
    public void onComplete(@NonNull Task<GetTokenResult> task) {
        if (task.isSuccessful()) {
            String token = task.getResult().getToken();
            // 'token' is not a Google Access Token
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Google Sign-In for Web指南中,可以通过调用获取访问令牌var token = result.credential.accessToken;,但我在Android中找不到类似的方法.

有什么投入?如果我没有提供足够的信息,请在这里发表评论.谢谢 :)

android google-login firebase-authentication google-signin

34
推荐指数
3
解决办法
2万
查看次数

用户从Android中的Gmail登录后如何获取访问令牌?

我正在关注Google登录Android版.现在我可以获得idToken,但我之前使用的后端服务器期待访问令牌,因为我之前使用的是Google+登录.现在我不想改变我的服务器端.但我仍然可以如何使用Google登录并在我的Android应用程序中获取访问令牌,以便我可以将我的用户验证到我的后端服务器.

我之前使用的是GooglePlay Service 7.5.0,现在我正在使用GooglePlay Service最新的8.3.0.

android google-play-services android-googleapiclient google-signin

24
推荐指数
5
解决办法
3万
查看次数

Retrofit - Multipart请求:必需的MultipartFile参数'file'不存在

我正在尝试使用Retrofit2在服务器上发送文件.我根据文档做了一切,但总是得到400服务器错误.

我试图这样做:

RequestBody body =
                RequestBody.create(MediaType.parse("image/png"), photo);
    //..........

    @Multipart
    @POST(ADD_PHOTO)
    Observable<HPSPhotoResponse>
    addPhoto(@Part("file") RequestBody file);
Run Code Online (Sandbox Code Playgroud)

......并且像这样:

MultipartBody.Part part = MultipartBody.Part.createFormData("file", "file", body);
     //...........

    @Multipart
    @POST(ADD_PHOTO)
    Observable<HPSPhotoResponse>
    addPhoto(@Part("file") MultipartBody.Part files);
Run Code Online (Sandbox Code Playgroud)

无所谓 结果始终相同"多部分请求:不存在所需的MultipartFile参数'文件'" - 服务器响应.

我认为服务器上的Spring工作不好,但是我在Swift(iOS)上做了相同的代码而且它有效!这里服务器看到这个'文件'部分.

Alamofire.upload(method, endpoint, headers: headers,
            multipartFormData: { multipartFormData in
                multipartFormData.appendBodyPart(fileURL: self.filePath!, name: "file")
            }
Run Code Online (Sandbox Code Playgroud)

现在我希望它可以在Android上使用Retrofit.但我甚至查看了Retrofit请求的日志,实际上我在日志中看不到任何"文件"文本.

这有什么问题?

android multipartform-data multipart retrofit retrofit2

23
推荐指数
1
解决办法
3万
查看次数

从API23移除Apache HTTP Client会对Volley产生影响吗?

正如我们所知,Apache HTTP Client已在API 23中删除

Apache HTTP客户端删除

但是,Volley库目前仍然使用Apache的库如

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.cookie.DateUtils;
Run Code Online (Sandbox Code Playgroud)

我测试了2个项目:一个用于compileSdkVersion 22,另一个用于compileSdkVersion 23获得2个截图:

compileSdkVersion 22

在此输入图像描述

compileSdkVersion 23

在此输入图像描述

我有两个问题:

  1. 当然,使用Volley的API23项目仍然可以成功运行.但是,我不明白他们如何Apache在运行时使用该库,他们是在API22或更低版本中找到的?
  2. 而且,我想知道在不久的将来,Volley会升级以便不再使用Apache图书馆吗?如果没有,当Apache我的图书馆完全删除并且不受支持时,我现在的项目是否仍会继续使用?

也许我的英语不太清楚,但希望你能理解我的问题.

任何解释将不胜感激.

更新:

从@ random的评论中,我使用谷歌的官方Volley库创建了一个新的API23项目(我的意思git clone https://android.googlesource.com/platform/frameworks/volley是谷歌建议的这里),而不是compile 'com.mcxiaoke.volley:library:1.0.17'build.gradle文件中使用.是的,在构建项目时因缺少Apache库而出错.必须按文档添加useLibrary 'org.apache.http.legacy'build.gradle文件中.


第二次更新:

我刚刚定制了谷歌的排球(作为我项目中的一个模块),删除了Apache库.请转到我的GitHub示例项目供您参考.但请注意,它尚未针对所有情况进行全面测试,并且我仅测试了02个简单案例:GET并且POST我的Web服务请求是ASP.NET Web …

apache android httpresponse android-volley android-api-levels

22
推荐指数
2
解决办法
1万
查看次数

<Your App>在使用Google Play服务时出现问题 - 使用GoogleApiClient时,它始终会触发onConnectionFailed

目前,我的应用正在使用

  • minSdkVersion 14
  • targetSdkVersion 23
  • 编译'com.google.android.gms:play-services-gcm:8.4.0'
  • 编译'com.google.android.gms:play-services-base:8.4.0'
  • 编译'com.google.android.gms:play-services-analytics:8.4.0'
  • 编译'com.google.android.gms:play-services-ads:8.4.0'
  • 编译'com.google.android.gms:play-services-drive:8.4.0'

我使用以下代码来执行GoogleApiClient连接.

public class GoogleApiClientFragment extends Fragment implements
        GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    public interface ConnectionCallbacks {
        void onConnected(GoogleApiClient googleApiClient, int action);
        void onCancel(int action);
    }

    public static GoogleApiClientFragment newInstance(String accountName, int action) {
        GoogleApiClientFragment googleApiClientFragment = new GoogleApiClientFragment();
        Bundle bundle = new Bundle();
        bundle.putString(INTENT_EXTRA_ACCOUNT_NAME, accountName);
        bundle.putInt(INTENT_EXTRA_ACTION, action);
        googleApiClientFragment.setArguments(bundle);
        return googleApiClientFragment;
    }

    /**
     * Handles resolution callbacks.
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        super.onActivityResult(requestCode, resultCode, data); …
Run Code Online (Sandbox Code Playgroud)

android google-play-services google-signin

16
推荐指数
2
解决办法
2万
查看次数

GoogleSignInAccount getPhotoUrl()返回null

试图从登录的个人资料中获取照片.但总是返回null.姓名和电子邮件返回值,只有照片有问题.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestProfile()
            .requestEmail()
            .build();
mGoogleApiClient = new GoogleApiClient.Builder(StartActivity.this)
            .enableAutoManage(StartActivity.this, StartActivity.this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)   
            .build();
acct = gResult.getSignInAccount();
String name = acct.getDisplayName(); //okay, value != null
String email = acct.getEmail(); //okay, value != null
Uri photoUri = acct.getPhotoUrl() //not okay, value == null
Run Code Online (Sandbox Code Playgroud)

为什么会这样?帐户已签名,电子邮件和姓名已获得,但照片始终失败.

android google-profiles-api google-signin

15
推荐指数
2
解决办法
1万
查看次数

OkHTTP从enqueue回调更新UI

我正在尝试使用OkHTTP库.调用服务器并获得成功响应时.我需要更新UI.

使用enqueue()进行异步调用时如何才能完成?

client.newCall(request).enqueue(new Callback() {

    @Override
    public void onFailure(Request request, IOException e) {

    }

    @Override
    public void onResponse(Response response) throws IOException {

        if (response.isSuccessful()) {

            // NEED TO UPDATE UI HERE

        } 
    }
});
Run Code Online (Sandbox Code Playgroud)

android okhttp

11
推荐指数
3
解决办法
1万
查看次数

Retrofit 2 Multipart POST请求向PHP发送额外的引号

使用Retrofit 2.0.1,我在Android App中定义的API接口中有一个调用函数:

@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
  @Part("lang") String lang,
  @Part("file\"; filename=\"image.jpg") RequestBody file
);
Run Code Online (Sandbox Code Playgroud)

我发送这样的请求:

Call call = service.doAPI("eng",imageFile);

其中imageFile是一个RequestBody与创建File对象.上传图片部分没有问题,而@Part("lang") String lang部分在服务器中得到额外的报价.

在PHP方面,它写如下:

$lang = trim($_POST['lang']);
Run Code Online (Sandbox Code Playgroud)

返回"eng".为什么在字符串周围有一个额外的双引号?

当然我可以删除尾随和引导双引号,但这样做很奇怪


相关问题:https://github.com/square/retrofit/issues/1210

php android multipartform-data multipart retrofit2

11
推荐指数
2
解决办法
3544
查看次数

如何为AutoCompleteTextView创建自定义BaseAdapter

我一直在为AutoCompleteTextView创建自定义ArrayAdapter时遇到困难,尽管在互联网上找到以下代码,但仍会出现这样的错误:

  • 下拉列表不会出现.
  • 自定义对象及其详细信息不会出现.

因此,对于那些遇到或遇到与我相同问题的人,我建议使用BaseAdapter代替AutoCompleteTextView.

android autocompletetextview android-arrayadapter baseadapter

10
推荐指数
2
解决办法
2万
查看次数