Ion son无法从localhost

时间:2015-10-12 13:18:50

标签: android json android-studio gson ion

我在android studio中的一段代码遇到了麻烦,这段代码已经可靠地工作了好几周。 任何时候我尝试通过localhost接收Json(在模拟器或我的设备上调试并通过wifi连接)我收到错误消息:

com.google.gson.JsonParseException:无法解析json

但是,如果我连接到远程服务器以获取JSON Echo,例如:

http://echo.jsontest.com/insert-key-here/insert-value-here/key/value

没有问题。

我已经确认JSON是有效的,就像我说它以前为我工作但我已经在网上双重检查了,我甚至创建了一个新的裸骨应用程序,只需一个按钮和一个请求,但仍然有同样的问题。

代码如下:

    public static class PlaceholderFragment extends Fragment {

    public static final String ACCOUNT_VIEW_URL = "http://192.168.0.10/~user/tests/accountEcho.php";  //"http://echo.jsontest.com/insert-key-here/insert-value-here/key/value";
    Button button;

    private static final String ARG_SECTION_NUMBER = "section_number";


    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home_screen, container, false);
        button = (Button) rootView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                netWork();
            }
        });
        return rootView;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((HomeScreenActivity) activity).onSectionAttached(
                getArguments().getInt(ARG_SECTION_NUMBER));
    }


    void netWork() {
        Ion.with(getActivity())
                .load(ACCOUNT_VIEW_URL)
                .asJsonObject()
                .setCallback(new FutureCallback<JsonObject>() {
                    @Override
                    public void onCompleted(Exception e, JsonObject result) {

                        if (null == e) {
                            //   Log.v("onCompleted", "not null");
                            Log.v("result", ""+result+"");
                        } else {
                            //  Log.v("onCompleted", "null");
                            Log.v("on completed", "" + e + "");

                        }
                        //TODO:::: JSON STRUCTURE - LOAD DP INTO VIEW
                    }
                });

    }
}

}

并且JSON响应是:

{
        "accType": "2",
        "firstname": "duracell",
        "lastname": "battery"
        "house_num": "122",
        "addL1": "Brick Lane",
        "addL2": "",
        "city": "Middx"

}

此外,如果我从我的计算机上的任何其他应用程序(visualJSON,chromeAdvancedRestClient,safari,firefox等)访问相同的localhost地址,它工作正常,响应是预期的。

任何人都可以告诉我发生什么事吗?

由于

2 个答案:

答案 0 :(得分:0)

如果您的JSON位于服务器上并且您通过HTTP请求访问它,则需要仅解析内容,而不是解析带有标题的整个文件。

尝试使用HTTP客户端,使用getResponse.getEntitygetResponse.getContent,然后使用其中一个解析器。

我从here复制。

答案 1 :(得分:0)

这就是我解决这个问题的方法:

第1步:

确保您拥有object课程,objects必须与JSON个对象具有相同的名称。

public class Tester {

    private String accType;
    private String firstname;
    private String lastname;
    private String addL1;
    private String addL2;
    private String city;


    public String getAccType() {
        return accType;
    }

    public void setAccType(String accType) {
        this.accType = accType;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getAddL1() {
        return addL1;
    }

    public void setAddL1(String addL1) {
        this.addL1 = addL1;
    }

    public String getAddL2() {
        return addL2;
    }

    public void setAddL2(String addL2) {
        this.addL2 = addL2;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

第2步:

然后我将JSON数据作为列表检索,但如果假设我有一个项目,我只需将每个元素编入索引,如下所示

        Ion.with(getBaseContext())
                        .load(url_)
                        .progressDialog(pd)
                        .as(new TypeToken<List<Tester>>() {
                        })
                        .setCallback(new FutureCallback<List<Tester>>() {

                            @Override
                            public void onCompleted(Exception e, List<Tester> itemList) {

                                try {


                                    String firstname= itemList.get(0).getFirstname();

//DO the same to other elements

      Log.v("result", "Firstname :"+firstname+"");


                                    pd.dismiss();


                                }

                                catch (Exception ex){

                                    Toast.makeText(getApplicationContext(),"Please check your Internet connection",Toast.LENGTH_LONG).show();
                                }






                            }



                        });


        }