我要讓網絡文章時,我收到短信broadcastreciever呼叫IntentService方法,但它給我下面的錯誤IntentService android.os.NetworkOnMainThreadException
Activity stop timeout for ActivityRecord{420eec20 u0 com.example.myapp/.LoginActivity}
11-29 00:03:23.486 W/System.err﹕ android.os.NetworkOnMainThreadException
11-29 00:03:23.591 W/System.err﹕ at
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-29 00:03:23.596 I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt'
11-29 00:03:23.596 W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
11-29 00:03:23.601 W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-29 00:03:23.606 W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:112)
11-29 00:03:23.611 W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-29 00:03:23.616 W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
我知道,在我們的服務不能使用互聯網一個漫長的過程,因爲mainthread 但intentservice是獨立的讓我告訴代碼
主要活動
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
final Intent intent = new Intent(this,AndroService.class);
this.startService(intent);
}
服務類
import org.json.JSONException;
import org.json.JSONObject;
public class AndroService extends IntentService
{
UsrAction upPayload;
private String smsURL = "exampleurl";
private HttpClientClass usrpayloader;
public AndroService() {
super("MyApp");
}
public AndroService(String name) {
super("MyApp");
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(this, "Service started", Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
onHandleIntent(intent);
return 1;
}
public enum RequestMethod
{
GET,POST
}
public void smspayload(Context context, String strBody)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String cookievalue = sharedPreferences.getString("androsession", null);
usrpayloader.AddParam("smsbody", strBody);
usrpayloader.AddHeader(cookievalue,"value");
try {
usrpayloader.Execute(RequestMethod.POST);
}
catch (Exception e) {
e.printStackTrace();
}
String fetchdata = usrpayloader.getResponse();
try {
JSONObject json = new JSONObject(fetchdata);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
廣播接收器類
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class broadcaster extends BroadcastReceiver
{
private final String TAG = "Hello";
private HttpClientClass usrpayloader;
private AndroService servusr;
@Override
public void onReceive(Context context, Intent intent)
{
Bundle extras = intent.getExtras();
String strMessage = "";
String strSrc="";
String strBody ="";
long time = 0;
if (extras != null)
{
Object[] smsextras = (Object[]) extras.get("pdus");
for (int i = 0; i < smsextras.length; i++)
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
strSrc = strMsgSrc;
strBody = strMsgBody;
time = smsmsg.getTimestampMillis();
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Log.i(TAG, strMessage);
}
Toast.makeText(context,strMessage,Toast.LENGTH_SHORT).show();
servusr = new AndroService();
servusr.smspayload(context,strBody,strSrc,time);
}
}
}
的問題是如何傳遞android.os.NetworkOnMainThreadException錯誤 ,我想用intentservice方法,從而是將對象聲明爲broadcastreceiver的好習慣?
當你爲這個(非常常見的)錯誤搜索或者在發佈之前在這裏搜索時,你學到了什麼? – Simon
'NetworkOnMainThreadException'。去谷歌上查詢。 – Ahmad
我GOOGLE了,看到類似的帖子在沙發上,但我沒有得到它如何刪除此錯誤.. 我不想使用ASYNC我只是想使用intentservice和broadcastreceiver 而我的朋友告訴我,下面的代碼是不是一個好的做法 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。build(); StrictMode.setThreadPolicy(policy); – Shayan