从函数中获取null返回值

时间:2015-08-21 12:06:24

标签: android function return-value

我有两个一级用于api通话。和其他用于获取api类的值。函数的返回值为null。我如何从返回值结果中获得价值。 这是功能类: -

 Jsondeletenote js = new Jsondeletenote(context);
        String retn =    js.deletsubmitData();

        Log.d("calllllllllll render", "helo"+retn);
        // retn value coming null

这里是api class

  public String deletsubmitData() {

        try {

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Looper.prepare();
                        Log.d("looper", "-->>>>");
                        try {
                            isAuthorized = isAuthenticated();
                        } catch (Exception e) {
                            Log.e("Exception ==> ", e.toString());  
                        }
                        MHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    if(isAuthorized){
                                        if(AuthenticationResultJSONObject!=null){
                                             Day1 = AuthenticationResultJSONObject.getString("Day");
                                            String Tomorrow = AuthenticationResultJSONObject.getString("Tomorrow");
                                            String Week = AuthenticationResultJSONObject.getString("Week");

                                        }
                                    }
                                    else
                                    {
                                        ///Toast.makeText(context, "Loing unsuccessfull, please try again !", Toast.LENGTH_SHORT).show();
                                    }
                                } 
                                catch (Exception e)
                                {
                                    e.printStackTrace();
                                    Log.e("Exception 146==> ", e.toString());  
                                } 
                                finally 
                                {
                                    //dialog.cancel();
                                }
                            }

                        });
                    } catch (Exception e) {
                        Log.e("Exception 153==> ", e.toString());  
                    }
                }
            }).start();
        } catch (Exception e) {
            Log.e("Exception 159==> ", e.toString());  
        }
        return Day1;
    }

    public boolean isAuthenticated() 
    {
        isAuthorized = false;

        final String url="www.abcd.com";

        try {


                AuthenticationResultJSONObject = new JSONObject(doFetchDataFromWebService_Simple_OnlyJSONResponse(url));    

                Log.v("Online", "User json array    ===  "+AuthenticationResultJSONObject);  
    else
            {
                MHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Toast.makeText(context, "Please check your internet connection and try again.", Toast.LENGTH_SHORT).show();
                    }
                });
            }*/
        }
        catch(Exception e){ 
            e.getMessage();
        }
        finally{
            if(AuthenticationResultJSONObject!=null){
                isAuthorized = true;
            }
            else
            {
                isAuthorized=false;
            }
        }
        return isAuthorized;
    }

1 个答案:

答案 0 :(得分:0)

你的代码到处都是。我建议你改写它..

总而言之,你在一个不同的线程中做一个异步工作,这意味着" deletsubmitData"的返回值。

将立即返回null,而线程可能(并且可能)仍在工作。

您应该做的是更改方法以返回void并为方法参数添加回调。在线程的操作结束时调用回调。

修改
使用其中的方法创建一个接口。然后从该接口传递一个新的实例对象作为参数,调用该方法。

这样的事情:

创建界面:

public interface IExampleCallBack
{
    void onFinish(String result);
}

创建实例并传递为参数:

IExampleCallBack callback = new IExampleCallBack(
{
    @Override
    public void onFinish(String result)
    {
        //do whatever you want with result.
    }
};
js.deletsubmitData(callback);

调用result中的interface方法:

public void deletsubmitData(IExampleCallBack callback)
{
    //your code inside the thread...
    //finish thread operation like so
    String resultExample = "finished";
    if (callback != null)
    {
        callback.onFinish(resultExample);
    }
}

请注意,如果回调参数为null,则由于空检查,您将永远不会从线程获得回调。但最好让你的应用程序崩溃。

祝你好运。