2
개체를 doInBackground에서 OnPostExecute로 전달하려고했지만 실패했습니다. 비슷한 주제를 읽었으며 관련이 없다고 생각합니다. (아마 충분히 경험이 안된다) 나는 안드로이드에 대한 몇 가지 조언을 원한다. 가독성을 높이기 위해 모든 코드 대신 관련 코드를 붙여 넣습니다. 난 단지 내 콘솔 내 log.i 결과를 볼 수 있어요 :개체 전달 AsyncTask doInBackground에서 OnPostExecute로
주요 활동
public void processFinish(Question q) {
TextView tview;
tview = (TextView)findViewById(R.id.textView1);
tview.setText(q.getQuestion());
}
AsyncTask를이
public class getQus extends AsyncTask<String,Void,Question> {
public AsyncResponse delegate;
@Override
protected Question doInBackground(String... params) {
String range = "1";
// TODO Auto-generated method stub
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("range",range));
int q_id = 0;
String result=null;
String q_qus =" ";
String result2 = " ";
Question q = new Question();
InputStream is = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.6/fyp/qus.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result2=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
System.out.println("HEllo");
//parse json data
try{
JSONArray jArray = new JSONArray(result2);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","id: "+json_data.getInt("q_id")+
", qus: "+json_data.getString("q_qus")
);
q.setQid(json_data.getInt("q_id"));
q.setQuestion(json_data.getString("q_qus"));
return q;
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return q;
}
protected void onPostExecute(Question q) {
System.out.println("AT ONPOSTEXECUTE");
System.out.println(q.getQuestion());
delegate.processFinish(q);
}
}
조사 결과는 (Q 객체이다). OnPostExecute가 전혀 실행되지 않습니다.
친절한 도움이나 제안 사항에 깊이 감사드립니다. 대단히 감사합니다!
extends AsyncTask<String,Void,Object>
extends AsyncTask<String,Void,Question>
에
당신이 전체 AsyncTask를 게시 할 수 있습니다 :
그리고 만약
당신의 활동은 단순히 않는 인터페이스를 구현한다? – Blackbelt자, 가자! @ 흑표 감사! – Gene
Im 사용하여 http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a onpostexecute에서 결과 전달에 대한 대답 주요 활동. – Gene