首页 > 解决方案 > 我无法从 REST API URL 获取 JSON 对象

问题描述

所以我一直在尝试从我的数据库中检索基本上是帖子的 JSON 文件。它们可以从我正在运行的 Django REST API 中获取。我可以访问该网址并查看我网络中任何设备的可用帖子。但是,我无法检索它们,以便它们可以发布在我的 Android 应用程序上。

postExecute我的登录AsyncTask没有显示任何 JSON 对象,只是空的。

它不会在我的 logcat 中返回任何错误消息,所以我不确定是什么问题。

我正在尝试制作原型社交网络类型的东西,其中帖子存储在我的数据库内的数据库中,并通过 API 获取它们。

AsyncTask用来连接到我的 URL 并在那里进行处理

帖子.java

public class Posts extends AppCompatActivity {

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_posts);

            PostsDetails postDetailsHelper = new PostsDetails();

            postsDoneBtn = (Button) findViewById(R.id.PostsDoneButton);

            postDetailsHelper.callPostDetails("192.168.0.18:8000/api/");

            postDetailsHelper.postDetailsCalled('n');

            postsDoneBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(Posts.this, MainActivity.class));

                }
            });
        }

        public class PostsDetails {

            // calls the execute for AsyncTask
            private void callPostDetails(String theurl){
                PostsHelper = new WSAdapter.SendPostsRequest();
                // sets if post details are called
                postDetailsCalled('y');
                // executes AsyncTask
                PostsHelper.execute(theurl);
            }

        }

}

WSAdapter.java

public class WSAdapter extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    static public class SendPostsRequest extends AsyncTask<String, String, String> {

        // Add a pre-execute thing
        HttpURLConnection urlConnection;

        @Override
        protected String doInBackground(String... params) {

            StringBuilder result = new StringBuilder();

            try {
                urlConnection = (HttpURLConnection) new URL(params[0]).openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                InputStream in = new BufferedInputStream(urlConnection.getInputStream());

                BufferedReader reader = new BufferedReader(new InputStreamReader(in));

                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }

            }catch( Exception e) {
                e.printStackTrace();
            }

            return result.toString();
        }

        @Override
        protected void onPostExecute(String result) {

            // expecting a response code fro my server upon receiving the POST data
            Log.e("TAG", result);

    }
}

标签: javaandroidandroid-asynctask

解决方案


您需要将协议方案添加到您的 URL: http://https://或您需要的任何其他内容。
所以它应该是这样的:

postDetailsHelper.callPostDetails("http://192.168.0.18:8000/api/");

推荐阅读