2012-12-01 4 views
1

나는 AsyncTask에 대해 읽고 있었고 프로그램을 사용해 보았습니다. 그러나 그것은 효과가없는 것처럼 보입니다. 나는 프로그래밍에 익숙하지 않은 경우 가능한 한 나를 도와주세요.AsyncTask, doInBackground()가 실행되지 않습니다

public class MainActivity extends Activity { 

TextView title; 
TextView date; 
TextView cat; 
TextView desc; 
Button rss; 

difficultTask doBack; 

private static final String TAG_ITEM = "item"; 
private static final String TAG_TITLE = "title"; 
private static final String TAG_LINK = "link"; 
private static final String TAG_DESC = "description"; 
private static final String TAG_DATE = "pubDate"; 
private static final String TAG_CAT = "category"; 


JSONArray rssFeed = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   
    title = (TextView)findViewById(R.id.title);     
    date = (TextView)findViewById(R.id.date);   
    cat = (TextView)findViewById(R.id.cat);   
    desc = (TextView)findViewById(R.id.description);   
    rss = (Button)findViewById(R.id.rss); 
    rss.setOnClickListener(new Button.OnClickListener() {    
     @Override 
     public void onClick(View v) { 
      doBack = new difficultTask(); 
      doBack.execute();     
      } 
     });   
} 

class difficultTask extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected Void doInBackground(Void... params) {   

     JSONObject json = getJSONFromUrl("http://example.com/mysite/rss.js"); 

     String categ = "";String t = "";String d = "";String da = "";String a = ""; 

     try {  
      JSONArray jsonArray = json.getJSONArray(TAG_ITEM); 
      for(int i = 0; i<jsonArray.length(); i++){ 
       JSONObject c = rssFeed.getJSONObject(i); 
       t = c.getString(TAG_TITLE); 
       a = c.getString(TAG_LINK); 
       d = c.getString(TAG_DESC); 
       da = c.getString(TAG_DATE); 
       categ = c.getString(TAG_CAT); 

      } 

      Log.d("Log", t+"/n"+a+"/n"+d+"/n"+da+"/n"+categ); 
     } catch (JSONException e) { 
      Log.d("Log", e.getMessage()); 
      e.printStackTrace(); 
     }    
     Log.d("Log", "Background"); 
     return t; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     title.setText(result); 
    } 

    public JSONObject getJSONFromUrl(String url){ 
     InputStream ips = null; 
     JSONObject jsonObj = null; 
     String json = ""; 

     try{ 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url);    
      HttpResponse respone = httpClient.execute(httppost); 
      HttpEntity entity = respone.getEntity(); 

      ips = entity.getContent(); 
     } 
     catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try{ 
      BufferedReader bufff = new BufferedReader(new InputStreamReader(ips, "UTF-8")); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while((line = bufff.readLine()) != null){ 
       sb.append(line + "\n"); 
      } 
      ips.close(); 
      json = sb.toString(); 
     } 
     catch(Exception e){ 
      Log.d("Log", e.toString()); 
     } 
      try { 
       jsonObj = new JSONObject(json); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     return jsonObj;   
    } 


} 

} 

doInBackground()가 작동하지 않습니다. 그리고 어떻게 내가 배경에서 어떤 String s, t, a, c, d, da를 반환 할 수 있습니까?

UPD : 죄송 로그 캣 지금 내가보고, 일하지 오류의 내가 you..try에 대한 몇 가지 간단한 Asynctask 추가이 당신에게 작동 여부를 말해했습니다 좋아

12-01 19:17:30.109: E/AndroidRuntime(2500): FATAL EXCEPTION: AsyncTask #1 
12-01 19:17:30.109: E/AndroidRuntime(2500): java.lang.RuntimeException: An error occured while executing doInBackground() 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.lang.Thread.run(Thread.java:856) 
12-01 19:17:30.109: E/AndroidRuntime(2500): Caused by: java.lang.NullPointerException 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at com.example.mytwitter.MainActivity$difficultTask.doInBackground(MainActivity.java:99) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at com.example.mytwitter.MainActivity$difficultTask.doInBackground(MainActivity.java:1) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
12-01 19:17:30.109: E/AndroidRuntime(2500):  ... 4 more 
+0

기록은 아주 깨끗합니다. "by by"을 읽으십시오. 당신이 가지고있는 어려움은 무엇입니까? – rds

+0

Log는 99 행에서 NPE를 분명히 말합니다. 99 행은 무엇입니까? –

+2

doInBackground에서 코드를 확인하십시오. JSON 객체를받지 못했거나 "항목"이 포함되어 있지 않은 것 같습니다 (99 행 참조). 또한 당신이 그것을 초기화하는 변수 "rssFeed"를 씹으시겠습니까? 아마 "jsonArray"로 교환 할 수 있을까요? – nfirex

답변

0

.

public class SenderActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     SenderActivity.Sender.execute(); 
    } 

    class Sender extends AsyncTask<Void, Integer, Integer> { 
     ProgressDialog pd = null; 
     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      pd = new ProgressDialog(SenderActivity.this); 
      pd.setTitle("Sending..."); 
      pd.setMessage("Please wait.."); 
      pd.setCancelable(false); 
      pd.show(); 
     } 
     @Override 
     protected Integer doInBackground(Void... params) { 
      System.out.println("Try some simple operation to learn well"); 
      //check whether this printing in your logcat 
      return 3; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 
      super.onPostExecute(result); 
      pd.dismiss(); 
     } 
    } 
} 
0
JSONObject json = getJSONFromUrl("http://example.com/mysite/rss.js"); 

귀하의 AsyncTask 완벽, 당신은 getJSONFromUrl()가 반환하는 내용을 확인하기 위해 문 앞에 로그를해야한다, 나는이 방법을 사용하면 오류가 직면하고있는 이유가 를 반환 생각합니다.

관련 문제