简体   繁体   English

AsyncTask,doInBackground()无法运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM