나는 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
기록은 아주 깨끗합니다. "by by"을 읽으십시오. 당신이 가지고있는 어려움은 무엇입니까? – rds
Log는 99 행에서 NPE를 분명히 말합니다. 99 행은 무엇입니까? –
doInBackground에서 코드를 확인하십시오. JSON 객체를받지 못했거나 "항목"이 포함되어 있지 않은 것 같습니다 (99 행 참조). 또한 당신이 그것을 초기화하는 변수 "rssFeed"를 씹으시겠습니까? 아마 "jsonArray"로 교환 할 수 있을까요? – nfirex