gpt4 book ai didi

android - 使用 OKHTTP3 向 Web 服务器发送 POST 请求

转载 作者:行者123 更新时间:2023-11-29 23:28:57 26 4
gpt4 key购买 nike

我正在创建一个用于支付电费的应用程序。我希望应用程序像这样工作。客户输入他/她的电表编号以及要支付的金额。单击提交按钮后,必须通过 OKHTTP3 协议(protocol)使用 POST 请求将此信息发送给服务提供商。我写了下面的代码,当我点击提交按钮时它什么也没显示。请帮忙。

package googleplayservices.samples.android.com.whitney.shumba;

import android.content.Intent;
import android.renderscript.RenderScript;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class Zesa extends AppCompatActivity {
private TextInputEditText txtinputmeter,txtinputamount;
private Button submit;
private TextView json;


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

json = (TextView) findViewById(R.id.jsonTV);
txtinputmeter = (TextInputEditText) findViewById(R.id.txt_input_meter);
txtinputamount = (TextInputEditText)
findViewById(R.id.txt_input_amount);
submit = (Button) findViewById(R.id.submitButton);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Okhttp3 client network request
OkHttpClient client = new OkHttpClient();
String url = "https://www.shumbapay.com";
Request request = new Request.Builder()
.url(url)
.build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}

@Override
public void onResponse(Call call, Response response) throws
IOException {
if(response.isSuccessful()){
final String myResponse = response.body().string();

Zesa.this.runOnUiThread(new Runnable() {
@Override
public void run() {
json.setText(myResponse);
}
});
}
}
});
Submit();
}

private void Submit() {
startActivity(new Intent(Zesa.this, Payzesa.class));
}
});
}

}

最佳答案

我会为您提供问题的解决方案以及一般如何使用 OKHTTP3 POST 请求的一般说明,因为您将来可能也需要扩展您的项目。

  • 第一步,您需要将要发送的数据转换为 JSON 对象。这将使您的代码更清晰,更易于维护。为此,为需要发送的数据创建一个 java 类。在您的情况下,java 类将如下所示:

     public class Data{
    @Expose
    private String meter;
    @Expose
    private String amount;
    //Add a constructor and getters + setters
    }

然后,将以下行添加到模块的 build.gradle 中:

implementation 'com.google.code.gson:gson:2.8.4'

这允许您使用 gson 库自动将您的 java 对象转换为 JSON 对象。

然后创建将包含您要发送的数据的 JSON 对象。这是按如下方式完成的:

    Data data=new 
Data(txtinputmeter.getText.toString(),txtinputamount.getText.toString());
Gson gson = new GsonBuilder().serializeNulls().create();
String JSONObjectString = gson.toJson(data);
  • 第二步,创建OKHTTP Post方法如下:

     public static String doPostOkHttp(String URL, String jsonObject) {
    OkHttpClient client = new OkHttpClient();
    RequestBody body = RequestBody.create(JSON, jsonObject);
    Request request = new Request.Builder()
    .url(URL)
    .post(body)
    .header("Content-type", "application/json")
    .build();
    try {
    Response response = client.newCall(request).execute();
    if (response.code() == 200) {
    Log.d("Server response 200",response.body().string());
    return response.body().string();
    } else {
    Log.d("Server response Error","ERROR");
    return "Server response Error";
    }
    } catch (IOException e) {

    }
    return "Server response Error";
    }

上述方法允许您向服务器发送消息并从服务器接收响应(如果它确实有正文)。

  • 第三步,发送包含您的数据的 JSON 对象这是按如下方式完成的:

    doPostOkHttp("your URL", JSONObjectString );

然后监控您的 logcat 并查看服务器响应是什么样的。


最好在单独的线程中运行 doPostOkHttp。只要你理解了上面的代码,你就可以很容易地使用你在代码中使用的回调技术。

如果您仍然遇到问题,请逐步完成这个非常简单的教程,以便您了解如何在 OKHTTP 中使用 Post 的所有内容: http://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html

关于android - 使用 OKHTTP3 向 Web 服务器发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com