2017-04-21 122 views
0

有關在此情況下返回多個值的任何想法?我想獲得的名稱,用戶名和年齡後執行方法無法從後臺執行多個值來執行後執行

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

追加三個弦以#或其他簽署並通過它 –

+1

另一種選擇是使自定義對象來保存這些值並返回對象ct – Denny

+0

@Denny有沒有例子? –

回答

2

創建模型類這樣的..

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

,並使用這個列表和修改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(); 
} 
+0

是的這個選項也不錯..好的@Abhishek Singh。 –

+0

爲什麼讓他們公開或創建一個模型類?當你可以簡單地創建一個ArrayList的字符串數組,並通過它來發布執行 – AwaisMajeed

+0

@AwaisMajeed是的,他也可以做​​到這一點..這是一個可能的解決方案..模型類可以重複使用多次相同類型的數據 –

0

試試這個:

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


} 
+0

爲什麼讓他們公開或創建一個模型班?當你可以簡單地創建一個ArrayList的字符串數組並傳遞它來執行後執行 – AwaisMajeed

+0

@AwaisMajeed「_Simple string_數組列表」,爲什麼你需要一個字符串數組列表?一串String就足夠了。 – Denny

+0

對不起.......「簡單的字符串或ArrayList的字符串數組」 – AwaisMajeed

0

試試這個:

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

選項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並返回用戶物體而不是字符串
return new User(name,username,age);

方案3:

返回數組或字符串列表

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

您可以直接發送

String value = bf.readLine(); 

而且在onPostExecute(),您可以解析該Json

0

傳遞JSON字符串後執行方法比解析它

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

} 
0

創建一個模型類

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

不要發佈相同的答案 –