当前位置: 首页 > 面试题库 >

使用JSON从API获取信息

谢诚
2023-03-14
问题内容

我在从此api阅读时遇到麻烦

http://api.xhanch.com/islamic-get-prayer-
time.php?lng=67&lat=24&yy=2012&mm=7&gmt=5&m=json

这是我的代码:

new Read().execute("sunrise");

public JSONObject retrieveInfo(String user) throws ClientProtocolException,IOException, JSONException {
        StringBuilder url = new StringBuilder(URL);
        url.append(user);

        HttpGet get = new HttpGet(url.toString());
        HttpResponse r = client.execute(get);
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);
        JSONArray timeline = new JSONArray(data);
        JSONObject last = timeline.getJSONObject(1);
        return last;
    }

    public class Read extends AsyncTask<String, Integer, String> {

        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            try {
                json = retrieveInfo("");
                return json.getString(arg0[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

此方法始终返回空白字符串,而不是我需要的信息。


问题答案:

这为你提供了一个可行的例子

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;

public class GetPrayerTime extends Activity {

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

        setContentView(R.layout.custom_component);

        new Read().execute("sunrise");

    }

    public JSONObject retrieveInfo(String user) throws ClientProtocolException,
            IOException, JSONException {
        StringBuilder url = new StringBuilder(
                "http://api.xhanch.com/islamic-get-prayer-time.php?lng=67&lat=24&yy=2012&mm=7&gmt=5&m=json");
        url.append(user);

        HttpClient httpclient = new DefaultHttpClient();
        HttpGet get = new HttpGet(url.toString());
        HttpResponse r = httpclient.execute(get);
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);
        JSONObject timeline = new JSONObject(data);
        return timeline.getJSONObject("1");
    }

    private class Read extends AsyncTask<String, Integer, String> {

        ProgressDialog pd = null;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pd = new ProgressDialog(GetPrayerTime.this);
            pd.setTitle("Downloading...");
            pd.setMessage("Please wait...");
            pd.setCancelable(false);
            pd.show();

        }

        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub
            try {
                JSONObject json = retrieveInfo("");
                return json.getString(arg0[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String status) {
            super.onPostExecute(status);
            pd.dismiss();

            AlertDialog alertDialog = new AlertDialog.Builder(
                    GetPrayerTime.this).create();
            alertDialog.setTitle("Prayer time");
            alertDialog.setMessage(status);
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    GetPrayerTime.this.finish();
                    dialog.cancel();
                }
            });
            alertDialog.setIcon(android.R.drawable.ic_dialog_info);
            alertDialog.show();

        }

    }

}


 类似资料:
  • 如果我在Instagram上有粉丝关注我的内容,并且在网上也有注册用户,有没有办法将两者联系起来? 有没有办法发现Instagram上的一个用户是否喜欢一张照片,并看看那个用户是否在我的网站上注册了?

  • 我有一个API,它会给出这样的JSON响应 我想从这个响应中找到所有唯一的属性。我尝试了以下方法,但没有一种有效- 方法-1 方法-2 接近-3 方法-4 方法-5 编辑-1:修复JSON。

  • 问题内容: 当我尝试从JSON字符串检索值时,它给了我一个错误: 但是,如果我遍历数据,它将为我提供元素(和),而不是值: 哪个返回: 我需要怎么做才能得到and 的值?(和) 问题答案: 如果要遍历字典的键和值,请执行以下操作:

  • 问题内容: 我得到的错误: 下面的代码,我正在使用: 直到这里,我得到了刷新令牌,访问令牌等 它在以下行失败:(不知道,为什么?) 我在网上搜索过,但很少看到它的示例和稀有资料。任何机构都有想法吗? 我究竟做错了什么? 问题答案: 我猜 credential.getRequestInitializer() 为空。 我已经通过将自定义请求初始化程序设置为凭证对象来解决了此问题 Google的文档规定

  • 我现在是一个大学的学生,我每天都在使用Moodle。我想访问一些我可用的信息(例如,我正在参加的类的信息,哪些任务是到期的,什么时候,等等) 我做了一些关于Moodle的API的研究,但似乎都是针对实际运行Moodle(我的大学)的高级用户。 作为一个学生,有没有一种简单的方法让我得到这些信息? 我的应用程序使用Node.js

  • 我正在编写一个C#应用程序,通过一些监控邮箱,清除超过指定期限(例如6个月)的电子邮件。 以前我要获取这些项,然后在块中依次删除每个项。在寻找另一个问题的解决方案时,我无意中使用了。这需要,但在下面的代码中,返回。 如何转换或获取传递给DeleteItems的正确类型?