不能 return 多个值从后台执行到 post 执行
cannot return multiple value from do in background to post execute
关于这种情况下的 return 多个值有什么想法吗?我想在 post 执行方法
处获取姓名、用户名和年龄
protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return name,username,age; //this part basically dont works
}catch(Exception e){
System.out.println(e);
}
像这样创建一个模型class..
public class Model {
private String username,name,age;
public Model(String username, String name, String age) {
this.username = username;
this.name = name;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
并将其用于 List 并修改您的 doInBackground()
方法...
protected Model doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return new Model(username,name,age);
}catch(Exception e){
System.out.println(e);
}
}
和onPostExecute()
使用这个
@Override
protected void onPostExecute(Model m) {
super.onPostExecute(m);
String name=m.getName();
String age=m.getAge();
String username=m.getUsername();
}
试试这个:
protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return name+","+username+","+age;
}catch(Exception e){
System.out.println(e);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
String[] array = s.split(",");
String name = array[0];
String username = array[1];
String age = array[2];
}
试试这个:
String name="1";
String username="b";
String age="mn";
String fullValue=name+"#"+username+"#"+age;
return fullValue;
现在在 OnpostExecute 中:
String[] gn=fullValue.split("#");
for (int i=0;i<gn.length;i++){
Log.e("values",gn[i]);
}
选项 1:
将结果附加到一个带有分隔符的字符串中,稍后拆分它们
return name + "~" + username + "~" + age;
拆分它们:
String[] seperated = YOURSTRING.Split("~");
并使用 seperated[0], seperated[1] and seperated[2]
获取值
选项 2:
做一个class
public class User {
String name, username, age;
public User(String name, String username, String age) {
this.name = name;
this.username = username;
this.age = age;
}
将 doInBackground 的 return 值更改为 User
和 return 用户对象而不是字符串
return new User(name,username,age);
选项 3:
Return 一个数组或字符串列表
List<String> data = new ArrayList<String>
data.add(user);
data.add(username);
data.add(age);
您可以直接从
发送值
String value = bf.readLine();
并且在 onPostExecute() 中,您可以解析 Json.
将 json 字符串传递给 post 执行方法然后解析它
protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
return vaue;
}catch(Exception e){
System.out.println(e);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
String json = s;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
}
创建一个模型class
public class UserDataModel {
String username,name,age;
public UserDataModel(String username, String name, String age) {
this.username = username;
this.name = name;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
现在在 doInBackground
ArrayList<UserDataModel> userList = new ArrayList<>();
protected ArrayList<UserDataModel> doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
UserDataModel model = new UserDataModel();
model.setName= finalObject.getString("NAME");
model.setUsername = finalObject.getString("USERNAME");
model.setAge= finalObject.getString("AGE");
userList.add(model);
return userList;
}catch(Exception e){
System.out.println(e);
}
关于这种情况下的 return 多个值有什么想法吗?我想在 post 执行方法
处获取姓名、用户名和年龄protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return name,username,age; //this part basically dont works
}catch(Exception e){
System.out.println(e);
}
像这样创建一个模型class..
public class Model {
private String username,name,age;
public Model(String username, String name, String age) {
this.username = username;
this.name = name;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
并将其用于 List 并修改您的 doInBackground()
方法...
protected Model doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return new Model(username,name,age);
}catch(Exception e){
System.out.println(e);
}
}
和onPostExecute()
使用这个
@Override
protected void onPostExecute(Model m) {
super.onPostExecute(m);
String name=m.getName();
String age=m.getAge();
String username=m.getUsername();
}
试试这个:
protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
return name+","+username+","+age;
}catch(Exception e){
System.out.println(e);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
String[] array = s.split(",");
String name = array[0];
String username = array[1];
String age = array[2];
}
试试这个:
String name="1";
String username="b";
String age="mn";
String fullValue=name+"#"+username+"#"+age;
return fullValue;
现在在 OnpostExecute 中:
String[] gn=fullValue.split("#");
for (int i=0;i<gn.length;i++){
Log.e("values",gn[i]);
}
选项 1:
将结果附加到一个带有分隔符的字符串中,稍后拆分它们
return name + "~" + username + "~" + age;
拆分它们:
String[] seperated = YOURSTRING.Split("~");
并使用 seperated[0], seperated[1] and seperated[2]
选项 2:
做一个class
public class User {
String name, username, age;
public User(String name, String username, String age) {
this.name = name;
this.username = username;
this.age = age;
}
将 doInBackground 的 return 值更改为 User
和 return 用户对象而不是字符串
return new User(name,username,age);
选项 3:
Return 一个数组或字符串列表
List<String> data = new ArrayList<String>
data.add(user);
data.add(username);
data.add(age);
您可以直接从
发送值String value = bf.readLine();
并且在 onPostExecute() 中,您可以解析 Json.
将 json 字符串传递给 post 执行方法然后解析它
protected String doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
return vaue;
}catch(Exception e){
System.out.println(e);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
String json = s;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
String name = finalObject.getString("NAME");
String username = finalObject.getString("USERNAME");
String age = finalObject.getString("AGE");
}
创建一个模型class
public class UserDataModel {
String username,name,age;
public UserDataModel(String username, String name, String age) {
this.username = username;
this.name = name;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
现在在 doInBackground
ArrayList<UserDataModel> userList = new ArrayList<>();
protected ArrayList<UserDataModel> doInBackground(String... params) {
try{
URL url = new URL (strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.connect();
//get response from server
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
String value = bf.readLine();
String json = value;
JSONObject parentObject = new JSONObject(json);
JSONArray parentArray = parentObject.getJSONArray("Data");
JSONObject finalObject = parentArray.getJSONObject(parentArray.length()-1);
UserDataModel model = new UserDataModel();
model.setName= finalObject.getString("NAME");
model.setUsername = finalObject.getString("USERNAME");
model.setAge= finalObject.getString("AGE");
userList.add(model);
return userList;
}catch(Exception e){
System.out.println(e);
}