2012-12-09 71 views
12

Trong một trong các hoạt động của tôi, tôi đang sử dụng AsyncTask. Trong doInBackground() Tôi đang thực hiện các cuộc gọi đến nhiều phương thức khác nhau. Trong một trong những phương pháp này tôi nhận được một ngoại lệ, vì vậy trong khối catch tôi muốn hiển thị lỗi trong Toast. Tôi biết tôi có thể sử dụng Log, nhưng tôi vẫn thích Bánh mì nướng. Vì vậy, làm cách nào tôi có thể sử dụng Bánh mì nướng trong AsyncTask trong doInBackground()?Cách hiển thị bánh mì nướng trong AsyncTask tại doInBackground

+0

tại sao bạn không retuning lỗi để onPostExecute từ doInBackground() và sau đó nên lỗi này trong một bánh mì nướng từ onPostExecute –

+0

bạn không thể sửa đổi giao diện người dùng từ phương thức doInBackground(), cố gắng trả lại một số kết quả, và kiểm tra kết quả đó trong phương thức onPostExecute(), nếu đúng như vậy, hãy hiển thị Toast – Houcine

+1

@Sam: easy man !! tôi đã không bình chọn, tôi vừa thêm bình luận của tôi, tôi biết rằng bạn có thể cho phép truy cập trong 'doInBackground()', nhưng không nên làm điều đó, nếu có, thì tại sao có phương thức 'onProgressUpdate () 'và' onPostExecute() '?? – Houcine

Trả lời

10

Bạn có thể gói bánh mì nướng trong runOnUIThread() nhưng đây không phải là giải pháp tốt nhất.
Bạn nên đặt cờ boolean trong khối catch khi xảy ra lỗi, sau đó hiển thị Bánh mì nướng thích hợp ở onProgressUpdate(), onPostExecute() hoặc bất kỳ phương pháp nào khác có quyền truy cập giao diện người dùng bất cứ khi nào cờ là true.

+0

Tôi cũng không hiểu rằng ... + 1'ed it – Ahmad

+1

@Ahmad Tôi đã trở lại, bởi vì chúng tôi là đúng sau khi tất cả. – Sam

+0

Bối cảnh nào sẽ được chuyển đến bánh mì nướng ** getBaseContext() ** hoặc ** getApplication() ** Bối cảnh? – hrishikesh

3

Bạn có thể hiển thị nó trong một phương pháp, có quyền truy cập đến thread UI như onPreExecute(), onProgressUpdate()onPostExecute()

17

trở về từ doInBackground như

protected String doInBackground(String... params){ 
    //some code 
    try{ 
     //some code 
    }catch(Exception e){ 
     return "Exception Caught"; 
    } 
    return someValidResult; 
} 

protected void onPostExecute(String result){ 
    if(result.equalsIgnoreCase("Exception Caught")){ 
     //Display Toast 
    }else{ 
     // // whatever you wana do with valid result 
    } 
} 
6

Viết đoạn mã sau, nơi bạn có để hiển thị bánh mì nướng trong doInBackground() phương pháp

runOnUiThread(new Runnable() { 

public void run() { 

    Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show(); 

    } 
}); 
  • BTW: nếu bạn đang sử dụng Fragments, bạn cần phải gọi runOnUiThread(...) thông qua hoạt động của bạn: Phương pháp

getActivity().runOnUiThread(...)

1
runOnUiThread(new Runnable() { 

public void run() { 

    Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show(); 

    } 
}); 

đang làm việc hoàn toàn tốt đẹp để hiển thị bánh mì nướng trong doInBackground()

4

Tạo xử lý đối tượng và thực hiện tất cả các tin nhắn bánh mì nướng của bạn bằng cách sử dụng đó.

@Override 
protected Void doInBackground(Void... params) { 

    Handler handler=new handler(); 
    handler= new Handler(context.getMainLooper()); 
    handler.post(new Runnable(){ 
     public void run(){ 
      Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show(); 
     } 
    }); 
    } 
0
activity.runOnUiThread(new Runnable() { 
public void run() 
{ 
    Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show(); 
} 
}); 
0

thử mã này

void showError(final String err) { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG) 
        .show(); 
     } 
    }); 
    } 
Các vấn đề liên quan