2

フィード ダイアログ ボックスを表示せずにアプリケーションからユーザー ウォールに投稿しようとしています。と のアクティビティがEditText getmessageありButton with onClick()=postToWallます。私はこの質問に従っています: Android Facebook Post On Wall Without Dialog Warnings

これが私のコードです:

public void postToWall(View v){
        String message = getmessage.getText().toString();
        postMessage(message);       
    }

    public void postMessage(String message){
        Log.d("test", "testing post to wall");
        try{
            String response;
            Bundle parameters = new Bundle();
            parameters.putString("message", message);           
            response = facebook.request("me/feed", parameters, "POST");

            Log.d("test", "got response "+response);

            if(response == null || response.equals("")){
                Log.v("Error", "Blank");
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }

以下はログです:

  06-06 20:03:19.726: I/ActivityManager(78): Displayed com.MyApp/.fbShare: +146ms
06-06 20:03:24.816: D/test(736): testing post to wall
06-06 20:03:24.828: W/System.err(736): android.os.NetworkOnMainThreadException
06-06 20:03:24.836: W/System.err(736):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
06-06 20:03:24.836: W/System.err(736):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
06-06 20:03:24.846: W/System.err(736):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
06-06 20:03:24.846: W/System.err(736):  at java.net.InetAddress.getAllByName(InetAddress.java:220)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
06-06 20:03:24.846: W/System.err(736):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
06-06 20:03:24.856: W/System.err(736):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
06-06 20:03:24.856: W/System.err(736):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
06-06 20:03:24.856: W/System.err(736):  at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:164)
06-06 20:03:24.856: W/System.err(736):  at com.facebook.android.Util.openUrl(Util.java:193)
06-06 20:03:24.866: W/System.err(736):  at com.facebook.android.Facebook.request(Facebook.java:751)
06-06 20:03:24.866: W/System.err(736):  at com.MyApp.fbShare.postMessage(fbShare.java:56)
06-06 20:03:24.866: W/System.err(736):  at com.MyApp.fbShare.postToWall(fbShare.java:47)
06-06 20:03:24.866: W/System.err(736):  at java.lang.reflect.Method.invokeNative(Native Method)
06-06 20:03:24.866: W/System.err(736):  at java.lang.reflect.Method.invoke(Method.java:511)
06-06 20:03:24.876: W/System.err(736):  at android.view.View$1.onClick(View.java:3039)
06-06 20:03:24.876: W/System.err(736):  at android.view.View.performClick(View.java:3511)
06-06 20:03:24.876: W/System.err(736):  at android.view.View$PerformClick.run(View.java:14105)
06-06 20:03:24.876: W/System.err(736):  at android.os.Handler.handleCallback(Handler.java:605)
06-06 20:03:24.886: W/System.err(736):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-06 20:03:24.886: W/System.err(736):  at android.os.Looper.loop(Looper.java:137)
06-06 20:03:24.886: W/System.err(736):  at android.app.ActivityThread.main(ActivityThread.java:4424)
06-06 20:03:24.886: W/System.err(736):  at java.lang.reflect.Method.invokeNative(Native Method)
06-06 20:03:24.896: W/System.err(736):  at java.lang.reflect.Method.invoke(Method.java:511)
06-06 20:03:24.896: W/System.err(736):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-06 20:03:24.896: W/System.err(736):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-06 20:03:24.896: W/System.err(736):  at dalvik.system.NativeStart.main(Native Method)

ここで何か不足していますか?どんな助けにも感謝します。ありがとう!

4

1 に答える 1

1

3.0 以降 (私が思うに)、メイン (UI) スレッドでネットワークを使用しようとすると、システムは例外をスローします。システムにこれを実行させることを選択したのは、開発者が実行時間の長いタスク (ネットワーク操作など) をメイン スレッドに配置しないようにするためです。

問題を解決するには、ネットワーク操作 (postMessage() の呼び出しなど) をバックグラウンド スレッドに移動する必要があります。いくつかのアプローチがあります。AsyncTaskを確認するか、 Handler / Threadの使用を調べてください。「Android create background threads」などで検索すると、多くの例がオンラインで見つかります。

また、Lars Vogel によって作成されたこのチュートリアルは、このことについて学ぶのに最適です。

于 2012-06-06T20:16:44.323 に答える