Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用异步任务时出错_Android - Fatal编程技术网

Android 使用异步任务时出错

Android 使用异步任务时出错,android,Android,我有两个并行运行的进程,在同一个数据库上有相同的读写操作。所以我想把他们带到一个asynctask,这样他们就可以互相同步了。但是在实现的过程中,产生了一个错误,我不知道fix希望人们如何帮助。 将应用程序运行到新同步()时。执行()错误 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.invoice); doTimerT

我有两个并行运行的进程,在同一个数据库上有相同的读写操作。所以我想把他们带到一个asynctask,这样他们就可以互相同步了。但是在实现的过程中,产生了一个错误,我不知道fix希望人们如何帮助。 将应用程序运行到新同步()时。执行()错误

 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice);
 doTimerTask();
}

public void workoffline()
{
    clearArray();
    try {
        mDb.openDB();
        Cursor mCursor = mDb.getAllInvoice(IDDelivery);
        if (mCursor.moveToFirst()) {
            do {
                codeInvoiceArray.add(mCursor.getString(1));
                nameArray.add(mCursor.getString(2));
                phonenumberArray.add(mCursor.getString(3));
                addressArray.add(mCursor.getString(4));
                urlArray.add(mCursor.getString(5));

            } while (mCursor.moveToNext());
            loaddatalistview();
        }
        mDb.closeDB();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

// lấy dữ liệu từ server về thiết bị
public void loaddata()
{

    String sampleURL = SERVICE_URL + "/monthlytarget.php";
    CallUrl wst = new CallUrl(CallUrl.GET_TASK, this, "Lấy thông tin hóa đơn...", 1, IDDelivery);
    wst.execute(new String[] {
            sampleURL
    });

    // Hiển thị thông tin nhận được lên listview

}

private class sync extends AsyncTask<Void, Void, Void>
{

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        loaddata();
        return null;
    }

    @Override
    protected void onPostExecute(final Void unused) {
        // TODO Auto-generated method stub
        workoffline();
    }

}

// kiểm tra thiết bị có kết nối mạng hay không?
// nếu có thiết bị sẽ làm việc online
// nếu không thiết bị sẽ chuyển sang hoạt động offline
public void testNetwork()
{
    // Kiểm tra kết nối đến server
    TestConnectionNew test = new TestConnectionNew();
    try {
        String recieve = test.execute("http://longvansolution.tk/monthlytarget.php").get();
        if (recieve.equalsIgnoreCase("true") && isNetworkAvailable() == true)
        {

           //loaddata();
           // workoffline();
            new sync().execute();
        }
        else if (recieve.equalsIgnoreCase("false") || isNetworkAvailable() == false)
        {
            String mess = "Không thể kết nối đến server hoặc thiết bị chưa có kết nối mạng!";
            Toast.makeText(Invoice.this, mess, Toast.LENGTH_SHORT).show();
            workoffline();
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

// thực hiện load data từ server về theo thời gian định sẵn
public void doTimerTask() {
    TimerTask mTimerTask;
    Timer t = new Timer();
    final Handler handler = new Handler();
    mTimerTask = new TimerTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    testNetwork();
                    Log.d("TIMER", "TimerTask run");
                }
            });
        }
    };
    // public void schedule (TimerTask task, long delay, long period)
    t.schedule(mTimerTask, 500, 300000); //
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice);
doTimerTask();
}
公共服务热线()
{
clearArray();
试一试{
openDB();
游标mCursor=mDb.getAllInvoice(IDDelivery);
if(mCursor.moveToFirst()){
做{
codeInvoiceArray.add(mCursor.getString(1));
add(mCursor.getString(2));
添加(mCursor.getString(3));
address数组.add(mCursor.getString(4));
添加(mCursor.getString(5));
}while(mCursor.moveToNext());
loaddatalistview();
}
mDb.closeDB();
}捕获(例外e){
e、 printStackTrace();
}
}
//lấy-dữ 锂ệu từ 服务器về 这ếTBị
公共void loaddata()
{
字符串sampleURL=SERVICE_URL+“/monthlytarget.php”;
CallUrl wst=新CallUrl(CallUrl.GET_任务,此为“Lấyôthôtin hóađn.“,1,IDDelivery);
执行(新字符串[]){
样本URL
});
//嗨ể第n条ị 新罕布什尔州thôtinậnđược lên列表视图
}
私有类同步扩展异步任务
{
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
loaddata();
返回null;
}
@凌驾
后期执行时受保护的无效(最终无效未使用){
//TODO自动生成的方法存根
修井线();
}
}
//碘化钾ể米特拉西ếTBị 科克ết nố我ạ吴海雄?
//nế乌科蒂ếTBị sẽ lám việc在线
//nếu không thiếTBị sẽ 丘伊ể恩桑浩ạtđộng离线
公共测试网络()
{
//碘化钾ể米特拉克ết nốiđến服务器
TestConnectionNew test=新的TestConnectionNew();
试一试{
字符串recieve=test.execute(“http://longvansolution.tk/monthlytarget.php).get();
if(receive.equalsIgnoreCase(“true”)和&isNetworkAvailable()==true)
{
//loaddata();
//修井线();
新建sync().execute();
}
else if(receive.equalsIgnoreCase(“false”)| | isNetworkAvailable()==false)
{
字符串mess=“khong thể Kết nốiđến服务器hoặc thiếTBị 契亚·科克ết nố我ạ!";
Toast.makeText(Invoice.this,mess,Toast.LENGTH_SHORT).show();
修井线();
}
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
}
//thự嗨ện加载数据từ 服务器về 提奥思ời gianđị新罕布什尔州ẵN
公共void doTimerTask(){
TimerTask-mTimerTask;
定时器t=新定时器();
最终处理程序=新处理程序();
mTimerTask=新的TimerTask(){
公开募捐{
handler.post(新的Runnable(){
公开募捐{
testNetwork();
Log.d(“计时器”、“TimerTask运行”);
}
});
}
};
//公共无效计划(TimerTask任务、长延迟、长周期)
t、 附表(mTimerTask,500,300000)//
}
错误

12-21 14:43:54.750:E/AndroidRuntime(11093):致命异常:AsyncTask#4
12-21 14:43:54.750:E/AndroidRuntime(11093):java.lang.RuntimeException:执行doInBackground()时出错
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.os.AsyncTask$3.done(AsyncTask.java:278)
12-21 14:43:54.750:E/AndroidRuntime(11093):在java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-21 14:43:54.750:E/AndroidRuntime(11093):位于java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-21 14:43:54.750:E/AndroidRuntime(11093):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-21 14:43:54.750:E/AndroidRuntime(11093):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-21 14:43:54.750:E/AndroidRuntime(11093):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-21 14:43:54.750:E/AndroidRuntime(11093):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-21 14:43:54.750:E/AndroidRuntime(11093):在java.lang.Thread.run(Thread.java:856)处
12-21 14:43:54.750:E/AndroidRuntime(11093):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
12-21 14:43:54.750:E/AndroidRuntime(11093):位于android.os.Handler.(Handler.java:121)
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.app.Dialog(Dialog.java:107)上
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.app.AlertDialog.(AlertDialog.java:114)上
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.app.AlertDialog.(AlertDialog.java:98)
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.app.ProgressDialog.(ProgressDialog.java:77)
12-21 14:43:54.750:E/AndroidRuntime(11093):在Url.CallUrl.showProgressDialog(CallUrl.java:289)上
12-21 14:43:54.750:E/AndroidRuntime(11093):位于Url.CallUrl.onPreExecute(CallUrl.java:300)
12-21 14:43:54.750:E/AndroidRuntime(11093):位于android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-21 14:43:54.750:E/AndroidRuntime(11093):在android.os.AsyncTask.execute(AsyncTask.java:511)
12-21 14:43:54.750:E/AndroidRuntime(11093):在com.longvan.saigonfleemarket.Invoice.loaddata(Invoice.java:240)
12-21 14:43:54.750:E/AndroidRuntime(
12-21 14:43:54.750: E/AndroidRuntime(11093): FATAL EXCEPTION: AsyncTask #4
12-21 14:43:54.750: E/AndroidRuntime(11093): java.lang.RuntimeException: An error occured while    executing doInBackground()
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at      java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.lang.Thread.run(Thread.java:856)
12-21 14:43:54.750: E/AndroidRuntime(11093): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.Handler.<init>(Handler.java:121)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.app.Dialog.<init>(Dialog.java:107)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.app.AlertDialog.<init>(AlertDialog.java:114)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.app.AlertDialog.<init>(AlertDialog.java:98)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at Url.CallUrl.showProgressDialog(CallUrl.java:289)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at Url.CallUrl.onPreExecute(CallUrl.java:300)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.AsyncTask.execute(AsyncTask.java:511)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at com.longvan.saigonfleamarket.Invoice.loaddata(Invoice.java:240)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at com.longvan.saigonfleamarket.Invoice$sync.doInBackground(Invoice.java:254)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at com.longvan.saigonfleamarket.Invoice$sync.doInBackground(Invoice.java:1)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
12-21 14:43:54.750: E/AndroidRuntime(11093):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    //your UI interaction code here

                }
            });
Toast.makeText(Invoice.this, mess, Toast.LENGTH_SHORT).show();