java - 我无法从 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);
}
}
解决方案
您需要将协议方案添加到您的 URL: http://
、https://
或您需要的任何其他内容。
所以它应该是这样的:
postDetailsHelper.callPostDetails("http://192.168.0.18:8000/api/");
推荐阅读
- swift - Swift UIButton titleColor在突出显示时改变?
- html - Markdown 图像、链接和可访问性
- r - 如何仅将字符的部分值用于x轴
- swift - map(keyPath) 其中 keyPath 是一个变量
- c# - WPF 从后面的代码向现有样式添加触发器
- android - 如何从图书馆开始活动
- c# - 从 Visio VSSX 文档导入形状
- unit-testing - go test 意外将 -test.timeout 标志传递给被测程序
- python - 将新字典添加到字典 python 列表中
- python - Python subprocess.Popen 不能与烧瓶一起使用