我正在创建一个用于支付电费的应用程序。我希望这个应用程序是这样工作的。客户输入他/她的仪表号码以及要支付的金额。单击submit按钮后,必须通过OKHTTP3协议使用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));
}
});
}
}发布于 2018-10-29 19:09:19
我会给你一个问题的解决方案,以及如何使用OKHTTP3 POST请求的一般解释,因为你将来可能也需要扩展你的项目。
JSON第一步,你需要将你想要发送的数据转换成对象。这将使您的代码更干净、更易维护。为此,需要为需要发送的数据创建一个java类。在您的示例中,java类将如下所示:
公有类Data{ @Expose private String meter;@Expose private String amount;//添加一个构造函数和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);公共静态字符串doPostOkHttp(String URL,String jsonObject) { OkHttpClient client =新的OkHttpClient();RequestBody body = RequestBody.create(JSON,jsonObject);Request request =新的Request.Builder() .url(URL) .post(body) .header("Content-type",“应用程序/json”) .build();try { response = client.newCall(request).execute();if (response.code() == 200) {log.d(“服务器响应200",response.body().string());return response.body().string();}否则{log.d(”服务器响应错误“," Error”);返回“服务器响应错误”;}} catch (IOException e) {} return“服务器响应错误”;}
上面的方法允许您向服务器发送一条消息,并从服务器接收响应(如果服务器具有正文)。
JSON
doPostOkHttp(“您的URL",JSONObjectString );
然后监视您的logcat,看看服务器响应是什么样子。
在单独的线程中运行doPostOkHttp是很好的做法。只要您理解了上面的代码,就可以很容易地使用您在代码中使用的回调技术。
如果您仍然面临问题,请一步一步地阅读这个非常简单的教程,这样您就可以理解如何在OKHTTP:http://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html中使用Post的所有内容
发布于 2018-10-29 18:08:47
在发送请求后,您将显示一个新活动。因此,当前活动无法检索服务器响应...你必须在收到响应后放入你的Submit()方法。
发布于 2018-10-29 18:13:40
根据您的编码,您将在响应之前导航到Payzesa.class
所以把意图或者动作放在里面
@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);
}
});
}
}
});https://stackoverflow.com/questions/53042930
复制相似问题