AsyncTask:如何 return 来自 doInBackground 的 HashMap?
AsyncTask: How to return a HashMap from doInBackground?
我目前正在 android 上做一个项目,当我测试函数、doInBackground 和 return 字符串的值时,程序成功执行。
但是,在我的项目中,我想从服务器获取多个东西。所以我想用HashMap来帮我完成这个。但它会引发错误。谁能告诉我为什么?此外,当我将 String 转换为 HashMap 时,onPostExecute 方法的覆盖也有错误 [Method does not override method from its superclass.
有人知道这是怎么回事吗?
我的代码如下所示。
class retrieveData extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please Wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected HashMap<String, String> doInBackground(String... args){
// new retrieveData().execute();
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
jsonObject = jsonParser.getJSONFromUrl(REG_URL, params);
try {
a = jsonObject.getString("key");
b = jsonObject.getString("name");
c = jsonObject.getString("gender");
// creating new HashMap
map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put("key", a);
map.put("name", b);
map.put("gender", c);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
// SuperClass does not have HashMap imposed...
@Override
protected void onPostExecute(HashMap<String, String> map){
pDialog.dismiss();
String aReceived = map.get("key");
String bReceived = map.get("name");
String cReceived = map.get("gender");
tv.setText(aReceived + '\n' + bReceived + '\n' + cReceived);
}
}
试试这个让我知道
class Loaddata extends AsyncTask<HashMap, HashMap, HashMap> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected HashMap<String, String> doInBackground(HashMap... args) {
// Building Parameters
HashMap<String, String> map = new HashMap<String, String>();
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
jsonObject = jsonParser.getJSONFromUrl(REG_URL, params);
try {
a = jsonObject.getString("key");
b = jsonObject.getString("name");
c = jsonObject.getString("gender");
// creating new HashMap
map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put("key", a);
map.put("name", b);
map.put("gender", c);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
}
return map;
}
@Override
protected void onPostExecute(HashMap map){
pDialog.dismiss();
String aReceived = map.get("key");
String bReceived = map.get("name");
String cReceived = map.get("gender");
tv.setText(aReceived + '\n' + bReceived + '\n' + cReceived);
}
}
就这么简单,
class A extends AsyncTask<String, String, HashMap<String, String>>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
// TODO Auto-generated method stub
}
@Override
protected HashMap<String, String> doInBackground(String... params)
{
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(HashMap<String, String> result)
{
super.onPostExecute(result);
// TODO Auto-generated method stub
}
}
我目前正在 android 上做一个项目,当我测试函数、doInBackground 和 return 字符串的值时,程序成功执行。
但是,在我的项目中,我想从服务器获取多个东西。所以我想用HashMap来帮我完成这个。但它会引发错误。谁能告诉我为什么?此外,当我将 String 转换为 HashMap 时,onPostExecute 方法的覆盖也有错误 [Method does not override method from its superclass.
有人知道这是怎么回事吗? 我的代码如下所示。
class retrieveData extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please Wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected HashMap<String, String> doInBackground(String... args){
// new retrieveData().execute();
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
jsonObject = jsonParser.getJSONFromUrl(REG_URL, params);
try {
a = jsonObject.getString("key");
b = jsonObject.getString("name");
c = jsonObject.getString("gender");
// creating new HashMap
map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put("key", a);
map.put("name", b);
map.put("gender", c);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
// SuperClass does not have HashMap imposed...
@Override
protected void onPostExecute(HashMap<String, String> map){
pDialog.dismiss();
String aReceived = map.get("key");
String bReceived = map.get("name");
String cReceived = map.get("gender");
tv.setText(aReceived + '\n' + bReceived + '\n' + cReceived);
}
}
试试这个让我知道
class Loaddata extends AsyncTask<HashMap, HashMap, HashMap> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected HashMap<String, String> doInBackground(HashMap... args) {
// Building Parameters
HashMap<String, String> map = new HashMap<String, String>();
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
jsonObject = jsonParser.getJSONFromUrl(REG_URL, params);
try {
a = jsonObject.getString("key");
b = jsonObject.getString("name");
c = jsonObject.getString("gender");
// creating new HashMap
map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put("key", a);
map.put("name", b);
map.put("gender", c);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
}
return map;
}
@Override
protected void onPostExecute(HashMap map){
pDialog.dismiss();
String aReceived = map.get("key");
String bReceived = map.get("name");
String cReceived = map.get("gender");
tv.setText(aReceived + '\n' + bReceived + '\n' + cReceived);
}
}
就这么简单,
class A extends AsyncTask<String, String, HashMap<String, String>>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
// TODO Auto-generated method stub
}
@Override
protected HashMap<String, String> doInBackground(String... params)
{
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(HashMap<String, String> result)
{
super.onPostExecute(result);
// TODO Auto-generated method stub
}
}