Java 如何实例化异步任务 package com.markana.yamba; 导入winterwell.jtwitter.Twitter; 导入winterwell.jtwitter.TwitterException; 导入android.app.Activity; 导入android.graphics.Color; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.text.Editable; 导入android.text.TextWatcher; 导入android.util.Log; 导入android.view.view; 导入android.view.view.OnClickListener; 导入android.widget.Button; 导入android.widget.EditText; 导入android.widget.TextView; 导入android.widget.Toast; 公共类StatusActivity2扩展了活动实现OnClickListener{ 私有静态最终字符串标记=“StatusActivity”; 编辑文本编辑文本; 按钮更新按钮; 文本视图文本计数; 推特; /**在首次创建活动时调用*/ @抑制警告(“弃用”) @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.status); //查找视图 editText=(editText)findViewById(R.id.editText); updateButton=(按钮)findViewById(R.id.buttonUpdate); setOnClickListener(这个); twitter=新twitter(“学生”、“密码”); twitter.setAPIRootUrl(“http://yamba.marakana.com/api")); } 公共void onClick(视图arg0){ //TODO自动生成的方法存根 字符串状态=editText.getText().toString(); 新建posttowitter().execute(状态); Log.d(标记为“onClick”); } 类PostToTwitter扩展了AsyncTask { @凌驾 受保护的字符串doInBackground(字符串…状态){ 试一试{ Status Status=Twitter.updateStatus(Status[0]); 返回status.text; } 捕获(twitter异常) { Log.e(标记,e.toString()); e、 printStackTrace(); 返回“发布失败”; } } 受保护的void onProgressUpdate(整型…值) { super.onProgressUpdate(值); } 受保护的void onPostExecute(字符串结果) { Toast.makeText(StatusActivity2.this,result,Toast.LENGTH_LONG.show(); } } }

Java 如何实例化异步任务 package com.markana.yamba; 导入winterwell.jtwitter.Twitter; 导入winterwell.jtwitter.TwitterException; 导入android.app.Activity; 导入android.graphics.Color; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.text.Editable; 导入android.text.TextWatcher; 导入android.util.Log; 导入android.view.view; 导入android.view.view.OnClickListener; 导入android.widget.Button; 导入android.widget.EditText; 导入android.widget.TextView; 导入android.widget.Toast; 公共类StatusActivity2扩展了活动实现OnClickListener{ 私有静态最终字符串标记=“StatusActivity”; 编辑文本编辑文本; 按钮更新按钮; 文本视图文本计数; 推特; /**在首次创建活动时调用*/ @抑制警告(“弃用”) @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.status); //查找视图 editText=(editText)findViewById(R.id.editText); updateButton=(按钮)findViewById(R.id.buttonUpdate); setOnClickListener(这个); twitter=新twitter(“学生”、“密码”); twitter.setAPIRootUrl(“http://yamba.marakana.com/api")); } 公共void onClick(视图arg0){ //TODO自动生成的方法存根 字符串状态=editText.getText().toString(); 新建posttowitter().execute(状态); Log.d(标记为“onClick”); } 类PostToTwitter扩展了AsyncTask { @凌驾 受保护的字符串doInBackground(字符串…状态){ 试一试{ Status Status=Twitter.updateStatus(Status[0]); 返回status.text; } 捕获(twitter异常) { Log.e(标记,e.toString()); e、 printStackTrace(); 返回“发布失败”; } } 受保护的void onProgressUpdate(整型…值) { super.onProgressUpdate(值); } 受保护的void onPostExecute(字符串结果) { Toast.makeText(StatusActivity2.this,result,Toast.LENGTH_LONG.show(); } } },java,android,android-asynctask,Java,Android,Android Asynctask,我得到两个与异步任务相关的异常 我就是这么做的。它告诉我运行后台工作程序时出现问题 package com.markana.yamba; import winterwell.jtwitter.Twitter; import winterwell.jtwitter.TwitterException; import android.app.Activity; import android.graphics.Color; import android.os.AsyncTask; import and

我得到两个与异步任务相关的异常

我就是这么做的。它告诉我运行后台工作程序时出现问题

package com.markana.yamba;

import winterwell.jtwitter.Twitter;
import winterwell.jtwitter.TwitterException;
import android.app.Activity;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class StatusActivity2 extends Activity implements OnClickListener{
    private static final String TAG= "StatusActivity";
    EditText editText;
    Button updateButton;
    TextView textCount;
    Twitter twitter;


    /** Called when the activity is first created. */
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.status);
        //Finds views
        editText =(EditText) findViewById(R.id.editText);
        updateButton=(Button) findViewById(R.id.buttonUpdate);
        updateButton.setOnClickListener(this);



        twitter=new Twitter("student","password");
        twitter.setAPIRootUrl(("http://yamba.marakana.com/api"));   

    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        String status=editText.getText().toString();
        new PostToTwitter().execute(status);
        Log.d(TAG, "onClick");
    }

    class PostToTwitter extends AsyncTask<String,Integer, String>
    {
        @Override
        protected String doInBackground(String... statuses) {

            try{
            Twitter.Status status=twitter.updateStatus(statuses[0]);
            return status.text;
            }
            catch(TwitterException e)
            {
                Log.e(TAG,e.toString());
                e.printStackTrace();
                return "Failed to post";
            }
        }


        protected void onProgressUpdate(Integer...values)
        {
               super.onProgressUpdate(values);
        }

        protected void onPostExecute(String result)
        {
            Toast.makeText(StatusActivity2.this,result,Toast.LENGTH_LONG).show();           
        }
    }





}
04-20 09:21:32.553:错误/AndroidRuntime(838):致命异常:AsyncTask#1
04-20 09:21:32.553:错误/AndroidRuntime(838):java.lang.RuntimeException:执行doInBackground()时出错
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在android.os.AsyncTask$3.done(AsyncTask.java:200)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在java.lang.Thread.run(Thread.java:1096)处
04-20 09:21:32.553:错误/AndroidRuntime(838):由以下原因引起:java.lang.IllegalArgumentException
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.Date.parse(Date.java:447)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在java.util.Date.(Date.java:157)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在winterwell.jtwitter.Twitter$Status。(Twitter.java:659)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3231)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):在winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3161)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于com.markana.yamba.StatusActivity2$posttowitter.doInBackground(StatusActivity2.java:60)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于com.markana.yamba.StatusActivity2$posttowitter.doInBackground(StatusActivity2.java:1)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于android.os.AsyncTask$2.call(AsyncTask.java:185)
04-20 09:21:32.553:ERROR/AndroidRuntime(838):位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-20 09:21:32.553:错误/AndroidRuntime(838):。。。4更多

它应该在最后弹出一条消息。。正如您在方法onClick中看到的

假设我理解正确:在onPostExecute方法中更新屏幕。您可能希望活动的成员变量保存当前任务。在onClick函数中,只需在创建新任务之前检查任务是否已在运行

另外,在销毁活动时,不要忘记删除单击侦听器,否则会泄漏内存

04-20 09:21:32.553: ERROR/AndroidRuntime(838): FATAL EXCEPTION: AsyncTask #1
04-20 09:21:32.553: ERROR/AndroidRuntime(838): java.lang.RuntimeException: An error occured while executing doInBackground()
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.lang.Thread.run(Thread.java:1096)
04-20 09:21:32.553: ERROR/AndroidRuntime(838): Caused by: java.lang.IllegalArgumentException
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.Date.parse(Date.java:447)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.Date.<init>(Date.java:157)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter$Status.<init>(Twitter.java:659)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3231)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3161)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at com.markana.yamba.StatusActivity2$PostToTwitter.doInBackground(StatusActivity2.java:60)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at com.markana.yamba.StatusActivity2$PostToTwitter.doInBackground(StatusActivity2.java:1)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     ... 4 more

假设我理解正确:在onPostExecute方法中更新屏幕。您可能希望活动的成员变量保存当前任务。在onClick函数中,只需在创建新任务之前检查任务是否已在运行

另外,在销毁活动时,不要忘记删除单击侦听器,否则会泄漏内存

04-20 09:21:32.553: ERROR/AndroidRuntime(838): FATAL EXCEPTION: AsyncTask #1
04-20 09:21:32.553: ERROR/AndroidRuntime(838): java.lang.RuntimeException: An error occured while executing doInBackground()
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.lang.Thread.run(Thread.java:1096)
04-20 09:21:32.553: ERROR/AndroidRuntime(838): Caused by: java.lang.IllegalArgumentException
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.Date.parse(Date.java:447)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.Date.<init>(Date.java:157)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter$Status.<init>(Twitter.java:659)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3231)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at winterwell.jtwitter.Twitter.updateStatus(Twitter.java:3161)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at com.markana.yamba.StatusActivity2$PostToTwitter.doInBackground(StatusActivity2.java:60)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at com.markana.yamba.StatusActivity2$PostToTwitter.doInBackground(StatusActivity2.java:1)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-20 09:21:32.553: ERROR/AndroidRuntime(838):     ... 4 more
可能是

protected void onDestroy() {
  updateButton.setOnClickListener(null);
  super.onDestroy();
}
失败,因为传入的上下文无效

尝试在
posttowitter
的构造函数中传递
上下文
,将其存储在本地,然后在创建
Toast
时使用此实例

例如,有关调用、构造函数和onPostExecute,请参见

protected void onDestroy() {
  updateButton.setOnClickListener(null);
  super.onDestroy();
}
失败了,就像