Java Android Post JSON数据
大家好,我正在尝试从EditText获取数据并将其作为JSON对象发布,但它返回的是空对象,没有数据 对象仅返回键,未映射到屏幕中显示的EditText中输入的值 注意:我只需要在Toast中检索JSON对象Java Android Post JSON数据,java,android,json,Java,Android,Json,大家好,我正在尝试从EditText获取数据并将其作为JSON对象发布,但它返回的是空对象,没有数据 对象仅返回键,未映射到屏幕中显示的EditText中输入的值 注意:我只需要在Toast中检索JSON对象 public class MainActivity extends AppCompatActivity { EditText userName; EditText password; EditText email; EditText phone;
public class MainActivity extends AppCompatActivity {
EditText userName;
EditText password;
EditText email;
EditText phone;
Button submit;
Person person;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
person = new Person();
userName = (EditText) findViewById(R.id.user_name);
password = (EditText) findViewById(R.id.password);
email = (EditText) findViewById(R.id.email);
phone = (EditText) findViewById(R.id.phone);
submit = (Button) findViewById(R.id.submit);
person.setUserName(userName.getText().toString());
person.setPassword(password.getText().toString());
person.setEmail(email.getText().toString());
person.setPhone(phone.getText().toString());
submit.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View v) {
new JsonDataConverter().execute(person);
}
});
}
private class JsonDataConverter extends AsyncTask < Person,
Void,
String > {
@Override
protected String doInBackground(Person...params) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("userName", person.getUserName());
jsonObject.put("password", person.getPassword());
jsonObject.put("email", person.getEmail());
jsonObject.put("phone", person.getPhone());
return jsonObject.toString();
} catch(JSONException ex) {
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
JSONObject jsonUser = new JSONObject(s);
jsonUser.get("userName");
jsonUser.get("password");
jsonUser.get("email");
jsonUser.get("phone");
Toast.makeText(MainActivity.this, jsonUser.toString(), Toast.LENGTH_SHORT).show();
} catch(JSONException e) {
e.printStackTrace();
}
}
}
}
您刚才在错误的位置使用了设置器。在ClickListener中使用它,如下所示
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
person = new Person();
userName = (EditText) findViewById(R.id.user_name);
password = (EditText) findViewById(R.id.password);
email = (EditText) findViewById(R.id.email);
phone = (EditText) findViewById(R.id.phone);
submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
person.setUserName(userName.getText().toString());
person.setPassword(password.getText().toString());
person.setEmail(email.getText().toString());
person.setPhone(phone.getText().toString());
new JsonDataConverter().execute(person);
}
});
}
编辑:
您使用的是高级成员person而不是param[0]没有post代码,您只是创建了一个json,在
doInBackground
和onPostExecute
中添加值只需从同一个json中获取值,而不将其保存在任何地方Pavneet Singh-我只需要JsonObject与数据一起显示在Toast中,直到知道为止,但它不需要,您可以使用person,但您应该将person从类级别删除,并使用param访问它。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
person = new Person();
userName = (EditText) findViewById(R.id.user_name);
password = (EditText) findViewById(R.id.password);
email = (EditText) findViewById(R.id.email);
phone = (EditText) findViewById(R.id.phone);
submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
person.setUserName(userName.getText().toString());
person.setPassword(password.getText().toString());
person.setEmail(email.getText().toString());
person.setPhone(phone.getText().toString());
new JsonDataConverter().execute(person);
}
});
}