我有这段代码,
应该CALL并等待
AsyncTask “getCreator”。
private String getcreator(String id) {
String creator = null;
Log.e("","entro proprio in getcreator "+ id);
if (id != null) {
String srt = "";
getCreator chn = new getCreator();
chn.execute(id, null, null);
try {
srt = chn.get();
Log.e("","predodo qulacosa da getcreator");
} catch (Exception e) {
Log.e("","exceltion in getcreator");
e.printStackTrace();
}
JSONObject jObject = null;
try {
jObject = new JSONObject(srt);
creator = jObject.getString("name");
} catch (JSONException e) {
// Json parse error usually
}
}
return creator;
}
但AsyncTask getCreator 从不执行其doinbackground()!!!
public class getCreator extends AsyncTask<String, String, String> {
public String res;
@Override
protected void onProgressUpdate(String... progress) {
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected String doInBackground(String... symbol) {
String result = "";
Log.e("","entro in getcreator"+ symbol[0]);
DefaultHttpClient client = new DefaultHttpClient();
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is
// established.
// The default value is zero, that means the timeout is not
// used.
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams
.setSoTimeout(httpParameters, timeoutSocket);
client.setParams(httpParameters);
String srt = "";
String url = "http://graph.facebook.com/".concat(symbol[0]);
HttpGet getMethod = new HttpGet(url);
try {
ResponseHandler<String> responseHandler = new BasicResponseHandler();
srt = client.execute(getMethod, responseHandler);
result = srt;
} catch (Throwable t) {
// Toast.makeText(getApplicationContext(),
// "Internet Problem", Toast.LENGTH_SHORT).show();
}
Log.e("","esco in getcreator");
return result;
}
}
请帮助!!!!
要精确: doInBackground()甚至没有被执行....
方法private String getcreator(String id)定期调用,并生成其Log。
帮助!
答案 0 :(得分:1)
日志说什么?哪里调用了getcreator(String id)方法?
(Cosa leggi nei log?Il metodo getcreator(String id)dove viene richiamato?)
[ - 等待OP - ]
你弄错了。您不必从AsyncTask中“获取”某些内容。
srt = chn.get();
AsycnTask正在执行一个异步任务,所以你启动它就是这样。在onPostExecute()中,“更新”完成任务。
(正如评论所指出的那样,你可以做到这一点,但这很糟糕)
首先,构造函数chn.execute(id, null, null)
中的这三个参数不是顶部AsyncTask<String, String, String>
上的参数。它们是您在doInBackground(String... symbol)
中获得的参数。因此symbol[0]
为id
,symbol[1]
和symbol[2]
为空
只是为了知识的缘故:
Log.e -> ERROR
Log.d -> DEBUG
Log.i -> INFO
你实际上是在“调试”,所以你应该使用Log.d
答案 1 :(得分:1)
尝试使用new getCreator().execute(id, "", "");
并在onPostExecute
写“Log.i("","post execute");
”
发布日志猫后
答案 2 :(得分:1)
调用get()
的{{1}}方法将阻塞主线程并等待返回结果。这有效地使AsyncTask成为同步操作,在这种情况下使用AsyncTask没有意义。
我能想到使用AsyncTask
方法的唯一原因是来自主(UI)线程以外的线程,尽管我想不出有很多理由这样做。
http://developer.android.com/reference/android/os/AsyncTask.html
您可以在get()
中返回结果。 doInbackground
计算的结果是doInBackground()
的参数。
因为你的asynctask是你活动的内部类。您可以将onPostExecute
声明为您的活动类变量并使用相同的变量。
String create
的AsyncTask
private String getcreator(String id) {
if(id!=null) // make sure id is not null
{
GetCreator chn = new GetCreator();
chn.execute(id);
// call execute to invoke asynctask
// there is no need to pass null
// pass the id to doInBackground()
}
}
答案 3 :(得分:1)
首先,方法getcreator()
的设计是错误的。
AsyncTask
将异步执行,但您的第一个线程(UI Thread?)将等待结果。
AsyncTask
在这种情况下毫无用处。
您可能应该在onPostExecute()
的{{1}}方法中更新您的UI(或根据结果执行任何操作),而不会阻止第一个帖子。