Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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查询ajax可以';无法从Grails web获取json结果_Android_Json_Grails_Android Query - Fatal编程技术网

Android查询ajax可以';无法从Grails web获取json结果

Android查询ajax可以';无法从Grails web获取json结果,android,json,grails,android-query,Android,Json,Grails,Android Query,我正在安卓工作室学习安卓开发。我使用Android查询库进行简单的HTTP调用,从GrailsWeb应用程序中获取JSON数据。在我的android用户界面中,我有一个按钮和一个编辑文本。我希望单击按钮后显示从服务器返回的JSON字符串。代码如下: public static class PlaceholderFragment extends Fragment { private AQuery aq; public PlaceholderFragment() { }

我正在安卓工作室学习安卓开发。我使用Android查询库进行简单的HTTP调用,从GrailsWeb应用程序中获取JSON数据。在我的android用户界面中,我有一个按钮和一个编辑文本。我希望单击按钮后显示从服务器返回的JSON字符串。代码如下:

public static class PlaceholderFragment extends Fragment {
    private AQuery aq;

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        aq = new AQuery(getActivity(), rootView);
        aq.id(R.id.button1).clicked(this, "onButtonClick");
        return rootView;
    }

    public void onButtonClick(View view) {
        String url = "http://localhost:8090/MyProject/main/index";
        aq.ajax(url, JSONObject.class, this, "jsonCallback");

    }

    public void jsonCallback(String url, JSONObject json, AjaxStatus status){
        if(json != null){
            aq.id(R.id.editText).text(json.toString());
        }else{
            aq.id(R.id.editText).text(status.getMessage());
        }
    }
}
在Grails方面,我只是直接返回一个json对象:

class MainController {
    def re = ['name' : 'abc']

    def index() {
        render re as JSON
    }
}
我可以在浏览器中访问我的Grails web url并获得正确的JSON数据:

{
    name: "abc"
}
如果我在虚拟设备中运行android应用程序,我只会收到“网络错误”消息。返回的JSON对象为空

如果我使用相同的android代码来访问Grails web url。我可以得到正确的json数据返回没有网络错误。为什么?


有谁能给我一些建议,让Android query与Grails web配合使用吗?

最后,我找到了原因:


要从Android Emulator访问PC上的本地主机web应用程序,我们不能使用本地主机作为服务器地址。我将URL更改为“http://10.0.3.2:8090/MyProject/main/index“(我使用的是Genymotion Android Emulator),它可以工作。

如果您使用的是Genymotion Android Emulator,那么URL应该是“//192.168.56.1:8090/MyProject/main/index”,这是您的本地ip地址,或者如果您使用的是默认Emulator,那么URL应该是“//192.168.56.1:8090/MyProject/main/index”“//10.0.0.2:8090/MyProject/main/index”

如果android使用浏览器的本机ajax功能/API,这可能是一个CORS问题。查看以下grails插件:谢谢你的回复。但是我不明白为什么相同的代码可以访问,如果是CORS问题,那么就可以得到json结果?我想我需要在Garils方面做些什么。但不知道如何做。