2014-12-19 2 views
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> 

답변

2

변화는 세 번째 제네릭 매개 변수는 결과이다. 문서에서

결과, 백그라운드 계산 결과의 유형. NPE에 대한

:

new getQus(ActivityName.this).execute(); 
+0

당신이 전체 AsyncTask를 게시 할 수 있습니다 :

public class getQus extends AsyncTask<String,Void,Question> { public AsyncResponse delegate; public getQus(AsyncResponse d) { delegate = d; } // other code } 

그리고 만약

당신의 활동은 단순히 않는 인터페이스를 구현한다? – Blackbelt

+0

자, 가자! @ 흑표 감사! – Gene

+0

Im 사용하여 http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a onpostexecute에서 결과 전달에 대한 대답 주요 활동. – Gene

관련 문제