안녕하세요. SMS를 삭제할 수있는 Android 앱을 개발하려고하는데, 지금까지 제대로 SMS를 삭제할 수 있었지만 모바일에 SMS가 많이 있었을 때 Force To Close 알림 상자가 온다, 나는 UI 스레드에서 모든 것을하고 있다는 것을 알고있다. 그래서 AsyncTask 기사를 통해 갔다. 그러나 코드를 삭제하는 나의 sms를 놓을 곳을 제대로 이해할 수 없다. 미리 도와 줘서 고마워.안드로이드에서 AsyncTask를 사용하여 SMS를 삭제하는 방법
여기 여기 저를 안내하시기 바랍니다 내 SecondClass 코드
public class SecondClass extends Activity {
ProgressDialog pd;
ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_class);
new AsyncTask<Void, Void, Void>()
{
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(this, "Loading..", "Please Wait", true,false);
}
@Override
protected Void doInBackground(Void... params) {
Cursor c = getApplicationContext().getContentResolver().query(Uri.parse("content://sms/"), null, null, null,null);
try
{
while (c.moveToNext())
{
int id = c.getInt(0);
getApplicationContext().getContentResolver().delete(Uri.parse("content://sms/" + id), null, null);
}
//Toast.makeText(SecondClass.this, "Messages Deleted", Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
Log.e(this.toString(),"Error deleting sms",e);
//Toast.makeText(SecondClass.this, "Error deleting sms", Toast.LENGTH_SHORT).show();
}
finally
{
c.close();
}
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(Void result) {
pd.dismiss();
}
}.execute((Void[])null);
}
}
내 MainActivity
public class MainActivity extends Activity {
Button btn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SecondClass.class));
}
});
}
}
입니다. 감사.
Toast.makeText(SecondClass.this, "Messages Deleted", Toast.LENGTH_SHORT).show();
Toast.makeText(SecondClass.this, "Error deleting sms", Toast.LENGTH_SHORT).show();
코드 인상이 예외 :
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
당신은 (당신은 publishProgress를 사용할 수 doInBackground 내부의 UI 스레드를 사용할 수 없습니다) 방법
정당한 것처럼 보이므로 정교하게 작성하십시오. 비동기 작업이 올바르게 작동합니까? –
SMS 삭제 코드를 제거하면 작동하지만, SMS 삭제 코드를 추가하면 강제 종료가 나타납니다. SMS 삭제 코드도 AsyncTask없이 제대로 작동합니다. –
문제는 ** doInBackground()에서 ** Toast **를 사용하고 있습니다. 내 대답을 확인하십시오. –