小编典典

使用JSON从API获取信息

json

我在从此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;
        }

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


阅读 256

收藏
2020-07-27

共1个答案

小编典典

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

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();

        }

    }

}
2020-07-27