Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android can';在完成任务后,您不会得到工作通知_Android_Facebook_Android Asynctask - Fatal编程技术网

Android can';在完成任务后,您不会得到工作通知

Android can';在完成任务后,您不会得到工作通知,android,facebook,android-asynctask,Android,Facebook,Android Asynctask,我正在使用facebook runner应用一些facebook api tesk。 我想检查是否有一个包含数据或错误消息的JSON对象,所以我要检查“message”字段以检查它是否为null。 如果它不为null并且我有一个消息,我想显示消息并退出应用程序 这是我活动中的代码: public class Loader extends Activity implements FacebookConnectionListener, ServerDataListener { private

我正在使用facebook runner应用一些facebook api tesk。 我想检查是否有一个包含数据或错误消息的JSON对象,所以我要检查“message”字段以检查它是否为null。 如果它不为null并且我有一个消息,我想显示消息并退出应用程序

这是我活动中的代码:

public class Loader extends Activity implements FacebookConnectionListener, ServerDataListener {
    private TextView loaderStatus;
    private Facebook facebook;
    private AsyncFacebookRunner facebookRunner;
    private FacebookConnection facebookConnection;   

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loader);
        facebook = new Facebook(facebookAppId);
        facebookRunner = new AsyncFacebookRunner(facebook);
        facebookConnection = new FacebookConnection(this, 1);
        facebookRunner.request("me",facebookConnection);
    }

    @Override
    public void onFacebookResponse(final String response , int step) {
        final JSONObject facebookResults = convertToJSON(response);
        final Context thisContext = (Context) getBaseContext();
        String id = "", name = "", gender = "", homeTown = "";
        Drawable profilePicture = null;

        if (step == 1) {
            if (facebookResults.isNull("message")) {
                try {
                    id = facebookResults.getString("id");
                    name = facebookResults.getString("name");
                    gender = facebookResults.getString("gender");
                    JSONObject homeTownObject = (JSONObject) facebookResults.get("hometown");
                    homeTown = homeTownObject.getString("name");
                    profilePicture = getProfilePicture(id);

                } catch (JSONException e) { 
                    alert("Facebook", e.toString(), "Ok", thisContext);
                }
                facebookCurrentUser = new FacebookCurrentUser(id, name, gender);
                facebookCurrentUser.setHomeTown(homeTown);
                facebookCurrentUser.setProfilePicture(profilePicture);
                app.setFacebookCurrentUser(facebookCurrentUser);
                facebookConnection = new FacebookConnection(this, 2);   
                this.runOnUiThread(new Runnable() {
                public void run() {
                        loaderStatus.setText("Getting friends details");
                    }
                });
            }
            else {
                this.runOnUiThread(new Runnable() {
                    public void run() {
                        alert("Facebook", "Can't get user details! Please try again", "Ok", thisContext);
                    }
                }); 
            }           
        }

public void alert (String title, String message, String ok, Context listener)
{
    AlertDialog.Builder alert = new AlertDialog.Builder(listener);
    alert.setMessage(message);
    alert.setTitle(title);
    alert.setPositiveButton(ok, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();   
        }
    });
    alert.show();
}
这是FacebookConnection类:

public class FacebookConnection implements RequestListener {
    private FacebookConnectionListener listener;
    private int step;

    public FacebookConnection (FacebookConnectionListener listener, int step) {
        this.listener = listener;
        this.step = step;
    }

    public void updateFacebookListener(String response) {
        listener.onFacebookResponse(response, step);
    }

    @Override
    public void onComplete(String response, Object state) {
        updateFacebookListener(response);           
    }

    @Override
    public void onIOException(IOException e, Object state) { }

    @Override
    public void onFileNotFoundException(FileNotFoundException e, Object state) { }

    @Override
    public void onMalformedURLException(MalformedURLException e, Object state) { }

    @Override
    public void onFacebookError(FacebookError e, Object state) { }
 }
FacebookConnectionListener接口:

public interface FacebookConnectionListener {
    public void onFacebookResponse(String response, int step);
}
我的提醒一直在告诉我:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我不明白为什么。。帮助?

它出现的原因是您试图从其他线程更新Ui。由于这是部分代码,我建议您将代码更改为

MyActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                    loaderStatus.setText("Getting friends details");
                }
            });
其中MyActivity是您的活动的名称

简单的方法:

你可以发表进展(某事)

并处理发布,以显示您的警报:D

好的,请尝试以下操作:

public void alert (String title, String message, String ok) {
    this.runOnUiThread(new Runnable() {
        public void run() {
            AlertDialog alert = new AlertDialog.Builder(Loader.this).create();
            alert.setMessage(message);
            alert.setTitle(title);
            alert.setPositiveButton(ok, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            alert.show();
        }
    });
}
当您调用它时,只需像调用任何其他方法一样调用它,而不是您现在拥有的:

this.alert("Facebook", "Can't get user details! Please try again", "Ok")
我不确定它到底出了什么问题,甚至可能与您在构建对话框时忘记了create()部分有关


希望这能帮你解决问题。

这段代码是什么的一部分?这节课是活动吗?还有,AsyncFacebookRunner在哪里?你说得对。。我已经编辑成postOk,但是这个方法是如何执行的?什么时候,通过什么线索?我仍然不知道您在哪里使用AsyncFaceBookRunner这是facebook asyncrunner的侦听器。当asynctask结束时,它会向这个函数发送响应我不明白,我以为你说的是活动,现在是侦听器?请编辑您的问题并添加所有相关的代码,否则我们在这里只是猜测,可能会花费很长时间。他正在使用runOnUiThread,因为它在他的代码中清楚地说明了这一点。它说:构造函数AlertDialog.Builder(new Runnable(){})是未定义的。对不起,伙计,我无法理解。你写的代码提供了我上面写的错误,我只是不明白为什么loaderStatus.setText可以工作而警报不能…哦,对不起,应该是Loader.this而不是this。另外,请注意,我在回答中将AlertDialog.Builder alert更改为AlertDialog alert。至于为什么setText没有失败,我不是100%确定,所以让我们先看看我写的东西是否有效。谢谢@Nitzan Tomer!我还没来得及检查(漫长的一天),但很快就会检查并更新结果。。非常感谢!当然,没问题。但我得说,从这条线索和我帮助你的前一条线索来看,你似乎有点不知所措。也许在你开始android开发之前,你应该先加强你的java基础?约姆托夫。