【问题标题】:HTTP Get Request in Android jsonAndroid json 中的 HTTP 获取请求
【发布时间】:2016-03-10 04:30:20
【问题描述】:
  1. 嗨,我不明白为什么这不起作用,我试图检索指定 url 中“offer”之后的任何内容,然后显示它,但是当我点击 android 屏幕上的 Offer 按钮时没有任何反应。如果可以,请提供帮助。我在清单中有互联网权限。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    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.json.JSONArray;
    import org.json.JSONObject;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ListView;
    

公共类 LoggedIn 扩展 Activity {

AlertDialog alertDialogStores;
ObjectItem[] ObjectItemData = new ObjectItem[5];    

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.logged_in);


    // a button to show the pop up with a list view
    View.OnClickListener handler = new View.OnClickListener(){
        public void onClick(View v) {
            switch (v.getId()) {                    

                case R.id.buttonShowPopUp:
                LoaderTask task = new LoaderTask();
                 task.execute();
                    break;
            }
        }
    };

    findViewById(R.id.buttonShowPopUp).setOnClickListener(handler);

}


class LoaderTask extends AsyncTask<Void , Void ,String>{
    ProgressDialog progressDialog ;
    public LoaderTask(){
        progressDialog = new ProgressDialog(SplashActivity.this);
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(false);
        progressDialog.setMessage("Loading app data...");
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        progressDialog.show();
    }

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

        return  connect("http://ec2-54-175-18-179.compute-1.amazonaws.com/customers/37.json");
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        progressDialog.dismiss();
        showPopUp(result);
    }
}

private String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

public String connect(String url)
{
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
        //Log.i(TAG,response.getStatusLine().toString());
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            String result= convertStreamToString(instream);
            instream.close();
            return result;
        }
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
    return null;
}

public void showPopUp(String result){
    try{
        JSONArray jsonArray = new JSONArray(result);
        for(int i = 0 ; i <= 5 ; i++){
            JSONObject o = jsonArray.getJSONObject(i);
            String http_response = o.getString("offer");
            System.out.println("test   "+http_response);
            //ObjectItemData[i] = new ObjectItem(o);

            ObjectItemData[0] = new ObjectItem(http_response);
            ObjectItemData[1] = new ObjectItem(http_response);
            ObjectItemData[2] = new ObjectItem(http_response);
            ObjectItemData[3] = new ObjectItem(http_response);
            ObjectItemData[4] = new ObjectItem(http_response);

            // adapter instance
            ArrayAdapterItem adapter = new ArrayAdapterItem(this, R.layout.list_view_row_item, ObjectItemData);

            // create a new ListView, set the adapter and item click listener
            ListView listViewItems = new ListView(this);
            listViewItems.setAdapter(adapter);
            listViewItems.setOnItemClickListener(new OnItemClickListenerListViewItem());

            // put the ListView in the pop up
            alertDialogStores = new AlertDialog.Builder(LoggedIn.this)
                .setView(listViewItems)
                .setTitle("Offers")
                .show();

        }
    } catch(Exception e){e.printStackTrace();}
    finally{System.out.println("Success");

    }
}

}

【问题讨论】:

标签: java android json http get


【解决方案1】:
   class LoaderTask extends AsyncTask<Void , Void ,String>{
        ProgressDialog progressDialog ;
        public LoaderTask(){
            progressDialog = new ProgressDialog(SplashActivity.this);
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(false);
            progressDialog.setMessage("Loading app data...");
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progressDialog.show();
        }

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

            return  connect("http://ec2-54-175-18-179.compute-1.amazonaws.com/customers/37.json");
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progressDialog.dismiss();
            showPopUp(result);
        }
    }

    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    public String connect(String url)
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        HttpResponse response;
        try {
            response = httpclient.execute(httpget);
            //Log.i(TAG,response.getStatusLine().toString());
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream instream = entity.getContent();
                String result= convertStreamToString(instream);
                instream.close();
                return result;
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }
        return null;
    }

    public void showPopUp(String result){
        try{
            JSONArray jsonArray = new JSONArray(result);
            for(int i = 0 ; i <  jsonArray.length() ; i++){
                JSONObject o = jsonArray.getJSONObject(i);
                String http_response = o.getString("offer");
                System.out.println("test   "+http_response);
                ObjectItemData[i] = new ObjectItem(http_response);
            }

          //and populate your listview here
        } catch(Exception e){e.printStackTrace();}
        finally{System.out.println("Success");

        }

    }

并调用它来执行任务 新的 LoaderTask().execute();

【讨论】:

  • 如果我不使用 JSONobject 对 jsonArray 进行类型转换,它会给我一个错误,当我这样做时,也会发生同样的事情
  • 不行,否则会报错
  • 类型不匹配,无法从 Object 转换为 JSONObject。这发生在 JSONObject o = jsonArray.get(i); for循环下面的第一行
  • 这样有效,但仍然没有显示任何内容。有没有我可以给你发电子邮件的问题?我不能在这里聊天,没有足够的声誉。
  • 我真的需要你的帮助,我知道我缺少一些简单的东西,但这让我发疯,我已经有一段时间了
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 2015-02-22
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多