android - 注册成功后如何获取 JSON 响应
问题描述
我可以成功地将用户数据发布到服务器中,但我很难从服务器获取响应(用户注册)。请查看我的代码并告诉我如何获取 Json 响应(用户注册)。我已经尝试使用布尔型和字符串类型的 Asynctask 来获取响应。但在这我保持那个字符串为空。请告诉我如何获取 Json 响应。提前致谢!!!
public class SignupActivity extends AppCompatActivity {
EditText firstName, lastName, emailTxt, passwordTxt;
TextView moveToLoginTxt;
Button signUpBtn;
public static String strFirstname;
public static String strLastName;
public static String strEmail;
public static String strPwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
Toolbar mToolbar = (Toolbar) findViewById(R.id.signuptoolbar);
mToolbar.setTitle("SignUp");
firstName = (EditText) findViewById(R.id.first_name_edittext);
lastName = (EditText) findViewById(R.id.last_name_edittext);
emailTxt = (EditText) findViewById(R.id.email_edittext);
passwordTxt = (EditText) findViewById(R.id.password_edittext);
moveToLoginTxt = (TextView) findViewById(R.id.login_textview);
signUpBtn = (Button) findViewById(R.id.btn_signup);
signUpBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
strFirstname = firstName.getText().toString();
strLastName = lastName.getText().toString();
strEmail = emailTxt.getText().toString();
strPwd = passwordTxt.getText().toString();
if (TextUtils.isEmpty(strFirstname)) {
firstName.setError("Please enter username");
firstName.requestFocus();
return;
}
if (TextUtils.isEmpty(strLastName)) {
lastName.setError("Please enter your lastname");
lastName.requestFocus();
return;
}
if (TextUtils.isEmpty(strEmail)) {
emailTxt.setError("Please enter your email");
emailTxt.requestFocus();
return;
}
if (TextUtils.isEmpty(strPwd)) {
passwordTxt.setError("Please enter your password");
passwordTxt.requestFocus();
return;
}
Registruser registruser = new Registruser();
registruser.execute();
Toast.makeText(SignupActivity.this, registruser.response + "Registration Successful", Toast.LENGTH_SHORT).show();
}
});
}
public interface MyInterface {
public void myMethod(boolean result);
void onPostExecute(Boolean result);
}
public class Registruser extends AsyncTask<Void, Void, String> implements MyInterface {
private MyInterface mListener;
String data;
public String response = null;
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL("my url");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.connect();
connection.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
@Override
public void myMethod(boolean result) {
if (result == true) {
Toast.makeText(SignupActivity.this, "Connection Succesful",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(SignupActivity.this, "Connection Failed:" + result, Toast.LENGTH_LONG).show();
}
}
@Override
public void onPostExecute(Boolean result) {
if (mListener != null)
mListener.myMethod(result);
}
}
}
解决方案
您必须创建一个 InputStreamReader 来读取您的请求输入。接下来,创建一个允许遍历响应的 BufferedReader。然后遍历我们响应的每一行并将其附加到您的 StringBuilder。
@Override
protected String doInBackground(Void... params){
String result;
String inputLine;
try {
//Create a URL object holding url
URL myUrl = new URL("your url");
//Create a connection
HttpURLConnection connection =(HttpURLConnection)
myUrl.openConnection();
//Set methods and timeouts
connection.setRequestMethod(REQUEST_METHOD);
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECTION_TIMEOUT);
//Connect to url
connection.connect()
//Create a new InputStreamReader
InputStreamReader streamReader = new
InputStreamReader(connection.getInputStream());
//Create a new buffered reader and String Builder
BufferedReader reader = new BufferedReader(streamReader);
StringBuilder stringBuilder = new StringBuilder();
while((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
//Close InputStream and Buffered reader
reader.close();
streamReader.close();
//Set result equal to stringBuilder
result = stringBuilder.toString();
}
return result;
}
推荐阅读
- javascript - 将数据从客户端发送到 Spring 控制器时出现 415 错误代码
- import - 将数据层应用程序导入 Azure SQL 服务器的问题
- java - Webview 不适用于 Android 8.0 (OREO) 上的 Scorm
- swift - Unable to initialise UIImage in TableCellView
- angular - ng 测试返回“0 个测试完成”
- javascript - javascript - 从用户输入转换多个代码并将转换后的字符显示为字符串
- c++ - 如何使用 boost log 防止内存增长?
- javascript - Serverless-webpack 部署脚本在 Webpack 4.8 中“挂起”,而在 3.12 中运行正常。
- javascript - 使用带有 nodejs 的 tesseract 获取无效回调
- java - 如何使用 JPA EclipseLink 启用 Unicode 编码?