调用httppost时无法启动活动componentInfo



我有一个功能,需要用邮政请求将令牌和Mac编号写入我的数据库。我从ongreate调用函数,当它叫我得到时:无法启动活动componentInfo

这是我的代码:

public void writeTokenAndMacToDB() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://example.com/w2a/process/updatetoken.php");
    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
        nameValuePairs.add(new BasicNameValuePair("appid", appID));
        nameValuePairs.add(new BasicNameValuePair("token", userToken));
        nameValuePairs.add(new BasicNameValuePair("device", "android"));
        nameValuePairs.add(new BasicNameValuePair("mac", deviceMac));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}

我会很高兴获得一些建议

我在Android中很新,所以这是我的杂物:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="web2application.master.com.myapplication">
    <!-- GCM connects to Google Services. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <permission android:name="web2application.master.com.myapplication.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="nirtzin.com.pushbots.permission.C2D_MESSAGE" />
    <!-- This app has permission to register and receive dataf message. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

完整的logcat错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                          Process: web2application.master.com.myapplication, PID: 14054
                                                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{web2application.master.com.myapplication/web2application.master.com.myapplication.MainActivity}: android.os.NetworkOnMainThreadException
                                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2326)
                                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:147)
                                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
                                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                              at android.os.Looper.loop(Looper.java:135)
                                                                                              at android.app.ActivityThread.main(ActivityThread.java:5264)
                                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                                              at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
                                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)
                                                                                           Caused by: android.os.NetworkOnMainThreadException
                                                                                              at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
                                                                                              at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
                                                                                              at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                                                                                              at java.net.InetAddress.getAllByName(InetAddress.java:215)
                                                                                              at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
                                                                                              at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
                                                                                              at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
                                                                                              at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
                                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
                                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
                                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
                                                                                              at web2application.master.com.myapplication.MainActivity.writeTokenAndMacToDB(MainActivity.java:964)
                                                                                              at web2application.master.com.myapplication.MainActivity.onCreate(MainActivity.java:300)
                                                                                              at android.app.Activity.performCreate(Activity.java:5975)
                                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
                                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                                                              at android.app.ActivityThread.access$800(ActivityThread.java:147) 
                                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
                                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                              at android.os.Looper.loop(Looper.java:135) 
                                                                                              at android.app.ActivityThread.main(ActivityThread.java:5264) 
                                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                                              at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900) 
                                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)

您需要在异步执行此任务,如下

class PerformTask extends AsyncTask<Void,Void,Void>{
        @Override
        protected Void doInBackground(Void... voids) {
            writeTokenAndMacToDB();
            return null;
        }
    }

并像以下

一样执行
new PerformTask().execute();

您无法在主线程上执行此类操作,以获取更多reffer此链接http://developer.android.com/reference/android/android/os/networkonmainthreadexpection.html

最新更新