不能 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);
}