استثناء Null Pointer عند نشر صورة على حائط Facebook (android)

يهدف تطبيقي إلى السماح للمستخدمين بالتقاط صورة ثم تحميلها على حائط Facebook. التعليمة البرمجية التالية تشبه إلى حد كبير العديد من الأمثلة الأخرى من رمز العمل المعطى على أسئلة SO الأخرى المتعلقة بهذه المشكلة نفسها بالضبط ، ومع ذلك لا يزال يعطيني استثناء المؤشر الفارغ:

    private void postOnWall()
    {
        final String response = "";
    try
    {
        Bundle params = new Bundle();
        params.putString("message", getMessage());
        params.putByteArray("picture", byteArray);
        mAsyncRunner.request(me/feed, params, "POST", new SampleUploadListener(),
        null);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }       
}

أود ببساطة الحصول على تحميل الصور قبل أن أتمكن من الانتقال إلى إضافة الرسالة معه. أيه أفكار؟

تصحيح:  هنا هو SampleUploadListener() الذي ينتقل مع سطر AsyncRunner (...):

public class SampleUploadListener extends BaseRequestListener {
    public void onComplete(final String response, final Object state) {
        try {
           //process the response here: (executed in background thread)
            Log.d("Facebook-Example", "Response: " + response.toString());
            JSONObject json = Util.parseJson(response);
            final String src = json.getString("src");

           //then post the processed result back to the UI thread
           //if we do not do this, an runtime exception will be generated
           //e.g. "CalledFromWrongThreadException: Only the original
           //thread that created a view hierarchy can touch its views."

        } catch (JSONException e) {
            Log.w("Facebook-Example", "JSON Error in response");
        } catch (FacebookError e) {
            Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
        }
    }

    @Override
    public void onFacebookError(FacebookError e, Object state) {
       //TODO Auto-generated method stub

    }
}

LogCat:

06-22 13:23:45.136: W/System.err(20667): java.lang.NullPointerException
06-22 13:23:45.136: W/System.err(20667):    at     com.uncc.cci.TrashPickup.TrashPickupActivity.postwall(TrashPickupActivity.java:475)
06-22 13:23:45.136: W/System.err(20667):    at com.uncc.cci.TrashPickup.TrashPickupActivity$5$1.onClick(TrashPickupActivity.java:230)
06-22 13:23:45.140: W/System.err(20667):    at android.view.View.performClick(View.java:3511)
06-22 13:23:45.140: W/System.err(20667):    at android.view.View$PerformClick.run(View.java:14105)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Handler.handleCallback(Handler.java:605)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-22 13:23:45.140: W/System.err(20667):    at android.os.Looper.loop(Looper.java:137)
06-22 13:23:45.140: W/System.err(20667):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-22 13:23:45.144: W/System.err(20667):    at java.lang.reflect.Method.invokeNative(Native Method)
06-22 13:23:45.144: W/System.err(20667):    at java.lang.reflect.Method.invoke(Method.java:511)
06-22 13:23:45.144: W/System.err(20667):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-22 13:23:45.144: W/System.err(20667):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-22 13:23:45.148: W/System.err(20667):    at dalvik.system.NativeStart.main(Native Method)
0
هل لديك صورة ليتم تحميلها؟ يتم عادةً طرح NullPointerException عندما يتم استدعاء كائن عندما يكون فارغة عندما لا يكون فارغة .
وأضاف المؤلف Jason L, مصدر
يمكنك تحميل byteArray لي/صور ، ولكن لا يمكنك تحميل bytearray كرسالة إلى جدار. لنشر صورة على حائط ، عليك تقديم عنوان URL صالح لمكان وجود هذه الصورة بالفعل على الإنترنت.
وأضاف المؤلف Genia S., مصدر
Yawus: 'byteArray' عبارة عن صفيف بايت من الصورة النقطية التي قمت بمعالجتها بالفعل. راجعت ذلك لمعرفة ما إذا كان لا شيء ولم يكن.
وأضاف المؤلف David B, مصدر
@ MichałK: سطر mAsyncRunner.request (...) يعطي استثناء المؤشر فارغة
وأضاف المؤلف David B, مصدر
كما هو موضح في الإجابة أدناه ، قمت بتغيير أول قيمة خالية إلى "me/photos" ، ولكنني ما زلت أتلقى نفس الخطأ. mAsyncRunner من النوع AsyncFacebookRunner.
وأضاف المؤلف David B, مصدر
يمكنك نشر LogCat الخاص بك؟
وأضاف المؤلف gsb, مصدر
أي خط (راجع LogCat أو نشره)؟
وأضاف المؤلف Michał K, مصدر
حسنا ، params ، "POST" و new SampleUploadListener() هي بالتأكيد ليست خالية. يجب أن يكون أحد هذين الرمز null s الذي يمنحك NPE. فقط تحقق مما يجب أن تذهب هناك (لا أعرف ما هو نوع الكائن الخاص بك mAsyncRunner ) ونشرها بدلاً من null .
وأضاف المؤلف Michał K, مصدر

2 إجابة

عندما تصحح أي خطأ موجود لديك هنا ، ستكتشف للأسف أنه من غير الممكن في الوقت الحالي نشر صورة على حائطك عن طريق تحميل وحدات الصورة الفعلية مباشرة إلى facebook. يمكنك تحميل صورة إلى معرض الصور الخاص بهم ، ولكن ليس على الحائط الخاص بهم. لنشر صورة على الحائط ، يجب أن تكون موجودة بالفعل على الإنترنت وستحتاج إلى توفير رابط إلى المكان الذي تعيش فيه مع البيانات الأخرى. إذا كنت مخطئا فإن هذا تطور جديد جدا حيث أنني واجهت كل هذا منذ بضعة أشهر ، بل وأرتكب خطأ مع فيسبوك رفضوا قوله إن "هذا ليس خطأ ، إنها الطريقة التي كنا نعتزم أن تكون عليها الأمور".

If you're ok with putting the photo in their gallery (if it's the only photo IN the gallery it will look almost exactly like a regular wall post) this is the way to do it: Android post picture to Facebook wall

0
وأضاف
لقد توصلت إلى هذا الاستنتاج بعد قراءة أكثر دقة من خلال وثائقهم ، لكنها كانت تأمل أن تكون قد أفرجت عن شيء أكثر ملاءمة في الوقت نفسه. للأسف ، لا يمثل تحميل صورة إلى معرضها خطة جيدة للتطبيق ، لذلك سأجد حلًا آخر. شكرا لإجابتك تأكيد مخاوفي!
وأضاف المؤلف David B, مصدر

يجب ان يكون:

private void postOnWall() {
    Bundle params = new Bundle();            
    params.putString("message", "New picture");
    params.putByteArray("source", byteArray);
    mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null);
}

You sent the path as null and that's probably why you got the null pointer exception.
Also according to the documentation the image parameter name is source.


تصحيح

جرب هذا للتحقق مما إذا كان mAsyncRunner فارغًا:

private void postOnWall() {
    Bundle params = new Bundle();            
    params.putString("message", "New picture");
    params.putByteArray("source", byteArray);
    Log.d("Facebook-Example", mAsyncRunner == null ? "mAsyncRunner is null" : "mAsyncRunner not null");
    mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null);
}

منذ أن تم طرح الخطأ في هذا الخط ، يبدو أن الشيء الوحيد الممكن.

0
وأضاف
لقد غيرت التعليمات البرمجية الخاصة بي لتعكس النصيحة الخاصة بك ولكن لسوء الحظ ما زلت أتلقى نفس استثناء المؤشر فارغة على نفس السطر. هل هناك أي شيء يجب أن يكون بما في ذلك في SampleUploadListener() التي قد تسبب هذا؟
وأضاف المؤلف David B, مصدر
لقد قمت بتحديث سؤالي لإظهار التغييرات ، و UploadListener ، و logcat
وأضاف المؤلف David B, مصدر
نعم ، إنه من نوع AsyncFacebookRunner (من com_facebook_android). لقد راجعت للتو وثائق هذا ، ووجدت هذا: "تقديم طلب إلى واجهة برمجة تطبيقات الرسم البياني في Facebook باستخدام طريقة HTTP المحددة ومعلمات السلسلة. لاحظ أن معلمات البيانات الثنائية (مثل الصور) ليست مدعومة بعد من خلال هذه الوظيفة المساعدة. " لقد رأيت العديد من المشاركات الأخرى هنا على SO التي استخدمت نفس هذه الطريقة (مع الوسيطة HTTP "POST") التي تدعي النجاح في نشر صورة مصفوفة البايت ، لذلك هذا يربكني.
وأضاف المؤلف David B, مصدر
شكرا لك على مساعدتك!
وأضاف المؤلف David B, مصدر
يمكنك نشر التعليمات البرمجية المعدلة الخاصة بك ورمز SampleUploadListener؟
وأضاف المؤلف Nitzan Tomer, مصدر
هل أنت متأكد من أن mAsyncRunner قد تم بناؤه؟
وأضاف المؤلف Nitzan Tomer, مصدر
يشير ذلك إلى طريقة الطلب للكائن Facebook العادي ، وليس AsyncFacebookRunner . قمت بتحرير جوابي.
وأضاف المؤلف Nitzan Tomer, مصدر
Android Sudan Community
Android Sudan Community
900 مشارك

كل اقتراحاتكم تتم مشاركتها هنا رابط القناة لتنزيل البرامج والالعاب من هنا @android_sudan تنبيه : القروب غير مختص إطلاقا بي الانترنت المجاني مثل ملفات الحاقن وماشابه يمنع منعا باتا نشر اي ملفات او برامج او اي شيء يتعلق بالانترنت المجان