当前位置: 首页 > 知识库问答 >
问题:

改装2个简单的post url编码

华安民
2023-03-14

这是我第一次使用改造,我迷失在说明中。我阅读了官方指南和许多其他答案和教程,但我仍然有困难。似乎它们都涵盖了复杂的场景,但不仅仅是一个领域的简单帖子。

这是我正在尝试做的细节。将名称发布到php服务器:

类型:application/x-www-form-urlencoded有效负载名称:例如name=John Smith

我花了相当多的时间,有基本的,但我想我错过了一些东西:

我发现我需要这样一个界面:

public interface ApiService {

    @FormUrlEncoded
    @POST("./")
    Call<User> updateUser(@Field("Name") String name);
}

然后我为我的用户提供了一个模型:

public class User {
    @SerializedName("Name")
    String name;
}

然后我的改装客户:

公共类RetroClient{

private static final String ROOT_URL = "http://alarm.abc.ch/";
public static ApiService RETROFIT_CLIENT;

    public static ApiService getInstance() {
        //if REST_CLIENT is null then set-up again.
        if (RETROFIT_CLIENT == null) {
            setupRestClient();
        }
        return RETROFIT_CLIENT;
    }

    private static void setupRestClient() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ROOT_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RETROFIT_CLIENT = retrofit.create(ApiService.class);
    }
}

在我的主要活动中,我在post函数中这样称呼它:

 public void post (){
        mRetrofitCommonService = RetroClient.getInstance();

        call = mRetrofitCommonService.updateUser("test");
        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {

                System.out.println("responseee  " + response);
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                System.out.println("eeee " + t);
            }
        });

从那时起,我完全迷失了。我确信我错过了一些小东西,但不确定是什么。

提前感谢您的帮助。

编辑:代码已更改以反映我当前的尝试。这给了我以下错误:

MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 2 path 

共有3个答案

爱繁
2023-03-14

在从getApiService()返回的对象上,您将能够调用updateUser()

响应此调用,您将收到一个调用对象,如下所示:

<代码>呼叫

然后要同步执行此调用,请执行以下操作:

<代码>用户更新调用。执行()

更新

对不起,我以前错过了。在ApiService界面中,执行以下操作:

@FormUrlEncoded
@POST("YourPostEndpoint")
Call<User> updateUser(@Field("Name") String name);

异步调用

有关更多详细信息,请参见此处

异步调用它,而不是。execute()使用以下代码(代码取自上述链接并修改为此场景:

userUpdateCall.enqueue(new Callback<User>() {  
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        if (response.isSuccessful()) {
            // user available
        } else {
            // error response, no access to resource?
        }
    }

    @Override
    public void onFailure(Call<List<Task>> call, Throwable t) {
        Log.d("Error", t.getMessage());
    }
}
严玉泽
2023-03-14

你就快到了!现在您必须调用api。

示例代码

public class App {

    private ApiService apiService = RetroClient.getApiservice();

    public static void main(String[] args) {

        User user = new User("username")
        Call<User> call = apiService.updateUser(user);
        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                int statusCode = response.code();
                User user = response.body();
                // process success
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                // process failure
            }
        });

    }

}

使用主活动中的post()方法更新

public void post() {

    Call<User> call = apiService.updateUser("username");
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            int statusCode = response.code();
            User user = response.body();
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Log error here since request failed
        }
    });

}
壤驷经国
2023-03-14

请参阅我的onCreate方法

public class LoginActivity extends AppCompatActivity {

    RetrofitCommonService mRetrofitCommonService;
    Call<LoginResponse> call;
    String firstName, lastName, userId, token;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mRetrofitCommonService = RetrofitClient.getInstance();

        call = mRetrofitCommonService.doLogin("danish.sharma@gmail.com", "12345678");
        call.enqueue(new Callback<LoginResponse>() {
            @Override
            public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
                LoginData responseReg = response.body().getData();

                firstName = responseReg.getFirstName();
                lastName = responseReg.getLastName();
                userId = responseReg.getUserId();
                token = responseReg.getToken();

                System.out.println("responseee  " + firstName + " " + lastName);
            }

            @Override
            public void onFailure(Call<LoginResponse> call, Throwable t) {
                System.out.println("eeee " + t);
            }
        });
    }
}

我的改装客户端类:

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by Danish.sharma on 7/22/2016.
 */
public class RetrofitClient {
    public static final String BASE_URL = "http://face2friend.com/";
    public static RetrofitCommonService RETROFIT_CLIENT;


    public static RetrofitCommonService getInstance() {
        //if REST_CLIENT is null then set-up again.
        if (RETROFIT_CLIENT == null) {
            setupRestClient();
        }
        return RETROFIT_CLIENT;
    }

    private static void setupRestClient() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RETROFIT_CLIENT = retrofit.create(RetrofitCommonService.class);
    }
}
import com.aquasoft.retrofitexample.model.LoginResponse;
import com.aquasoft.retrofitexample.model.RegistrationResponse;
import com.aquasoft.retrofitexample.model.UserImageResponse;
import com.aquasoft.retrofitexample.model.VehicleResponse;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * Created by Danish.sharma on 7/22/2016.
 */
public interface RetrofitCommonService {

    /*@POST("http://server.pogogamessupport.com/parkway/api/v1/registration")
    Call<RegistrationResponse> createUser(@Body RegistrationResponse user);*/

    @FormUrlEncoded
    @POST("registration")
    Call<RegistrationResponse> doRegistration(@Field("email") String email, @Field("firstname") String firstname, @Field("lastname")
    String lastname, @Field("password") String password);

    @FormUrlEncoded
    @POST("login")
    Call<LoginResponse> doLogin(@Field("email") String email, @Field("password") String password);

    @FormUrlEncoded
    @POST("listvehicle")
    Call<VehicleResponse> getAllVehicle(@Field("userId") String userId, @Field("token") String token);

    @Multipart
    @POST("updateprofilepic")
    Call<UserImageResponse> updateUserImage(@Part("userId") RequestBody userId, @Part("token") RequestBody  token, @Part MultipartBody.Part image);

}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.okhttp:okhttp:2.4.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}

如果您仍然需要任何帮助,请发表评论。

 类似资料:
  • 问题内容: 我有2个字符串对象的arraylists。 我有一些逻辑需要处理源列表,最终会得到目标列表。目标列表将有一些其他元素添加到源列表或从源列表中删除。 我的预期输出是string的2 ArrayList,其中第一个列表应具有从源中删除的所有字符串,第二个列表应具有所有新添加到源中的字符串。 有没有更简单的方法来实现这一目标? 问题答案: 将列表转换为 并使用 输出: [编辑] 其他方式(更

  • 我正在尝试合并2棵二叉树,而不用担心使结果树平衡。这是我的解决方案,但不起作用。为什么Treenode ans和head从合并函数返回时设置为0。正如我所理解的,由于TreeNode不是原始类型,因此指向ans的head应该在调用合并函数后使用生成的树更新https://leetcode.com/problems/merge-two-binary-trees/

  • 简单模式 我们将从最简单的正则表达式学习开始。由于正则表达式常用于字符串操作,那我们就从最常见的任务:字符匹配 下手。 有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动机),你可以查阅编写编译器相关的任何教科书。

  • 本文向大家介绍Linux下编译安装Mysql 5.5的简单步骤,包括了Linux下编译安装Mysql 5.5的简单步骤的使用技巧和注意事项,需要的朋友参考一下 首先是安装cmake环境。因为博主测试机是ubuntu,所以直接用apt-get install cmake命令来安装,yum相信应该也一样。或者可以编译安装,步骤如下。 复制代码>复制代码<\/a> 代码如下: wget http://w

  • 问题内容: 我正在寻找一个简单的功能,可以从instagram评论中删除表情符号字符。我现在已经尝试过的内容(带有在SO和其他网站上找到的示例中的许多代码): 任何帮助,将不胜感激 问题答案: 我认为preg_replace函数是最简单的解决方案。 正如EaterOfCode所建议的那样,由于没有SO(或其他网站)答案似乎适用于Instagram照片标题(API返回格式),因此我阅读了Wiki页并

  • This section is intended as a walkthrough for the creation of custom extensions. It covers the basics of writing and activating an extensions, as well as commonly used features of extensions. As an ex