【问题标题】:cannot return multiple value from do in background to post execute无法在后台从 do 返回多个值以发布执行
【发布时间】:2017-09-18 06:38:50
【问题描述】:

关于在这种情况下返回多个值的任何想法?我想在 post execute 方法中获取姓名、用户名和年龄

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

【问题讨论】:

  • 附加三个带有#或其他符号的字符串并传递它
  • 另一种选择是制作一个自定义对象来保存这些值并返回对象
  • @Denny 有什么例子吗?
  • @DivyeshPatel 你能在这里给我写一个简单的吗?我完全不知道
  • 为什么不直接将json字符串传递给post execute方法,然后解析那个json

标签: java android return-value


【解决方案1】:

像这样创建一个模型类..

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(); 
}

【讨论】:

  • 为什么要公开它们或创建模型类?当您可以简单地创建一个字符串的 ArrayList 数组并将其传递给 post 执行时
  • @AwaisMajeed 是的,他也可以这样做..这是一种可能的解决方案..模型类也适合多次重复使用相同类型的数据
【解决方案2】:

试试这个:

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];


 }

【讨论】:

  • 为什么要公开它们或创建模型类?当您可以简单地创建一个字符串的 ArrayList 数组并将其传递给 post 执行时
  • @AwaisMajeed "简单的arraylist of string",你为什么需要一个arraylist of string?一个字符串数组就足够了。
【解决方案3】:

试试这个:

        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]);
    }

【讨论】:

    【解决方案4】:

    选项 1:
    将结果附加到一个带分隔符的字符串中,稍后将它们拆分
    return name + "~" + username + "~" + age;
    要拆分它们:
    String[] seperated = YOURSTRING.Split("~"); 并使用 seperated[0], seperated[1] and seperated[2] 获取值

    选项 2:
    开课

    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的返回值改为User,并返回User对象而不是字符串
    return new User(name,username,age);

    选项 3:

    返回一个数组或字符串列表

    List<String> data = new ArrayList<String>
    data.add(user);
    data.add(username);
    data.add(age);
    

    【讨论】:

      【解决方案5】:

      您可以直接发送 value From

      String value = bf.readLine();
      

      在 onPostExecute() 中,你可以解析那个 Json

      【讨论】:

        【解决方案6】:

        将该 json 字符串传递给 post execute 方法,然后解析它

        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");
        
        }
        

        【讨论】:

          【解决方案7】:

          创建一个模型类

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

          【讨论】:

          • 不要发布相同的答案
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          • 1970-01-01
          • 1970-01-01
          • 2020-11-23
          相关资源
          最近更新 更多