[英]AsyncTask, doInBackground() doesn't run
I was reading about AsyncTask
and I tried a program. 我正在阅读有关
AsyncTask
并尝试了一个程序。 But it does not seem to work. 但这似乎不起作用。 I am new to programming, if possible can you please help me out.
我是编程新手,如果可以的话,请帮帮我。
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()
is not working, please help. doInBackground()
无法正常工作,请提供帮助。 And how i can return some String
st,a,c,d,da from background? 以及如何从背景返回一些
String
st,a,c,d,da?
UPD: Sorry Logcat not worked, now i see error's UPD:对不起Logcat无法正常工作,现在我看到错误了
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
Okay I've added some simple Asynctask
for you..try and tell me whether this working to you. 好的,我为您添加了一些简单的
Asynctask
。尝试并告诉我这是否对您有效。
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();
}
}
}
JSONObject json = getJSONFromUrl("http://example.com/mysite/rss.js");
您的AsyncTask
非常完美,您应该在此语句之前进行日志记录,以检查getJSONFromUrl()
返回的内容,我认为此方法返回null的原因就是您遇到错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.