【问题标题】:How to implement json to android correct?如何正确实现json到android?
【发布时间】:2018-01-04 18:18:29
【问题描述】:

我一直在关注如何在 android 上显示 Json 数组的教程,但我不断收到“无法从服务器获取 json。请检查互联网连接!”我不知道为什么。我的 Json 是从 php 文件生成的,这在我在浏览器上创建列表时有效。所以我确信我的 Json 可以工作。

编辑:我需要做哪些调整才能从这个网址读取?

来自“https://www.googleapis.com/books/v1/volumes?q=bond”的 JSON 数组

安卓:

import android.app.ProgressDialog;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class HomeScreen extends AppCompatActivity{

private ListView lv;
private ProgressDialog progress;

private String url="https://www.googleapis.com/books/v1/volumes?q=bond";

ArrayList<HashMap<String,String>> booklist;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);
    booklist=new ArrayList<>();
    lv= (ListView) findViewById(R.id.list);
    new getBooks().execute();
}

public class getBooks extends AsyncTask<Void,Void,Void> {
protected void onPreExecute(){
    super.onPreExecute();
    progress=new ProgressDialog(HomeScreen.this);
    progress.setMessage("Fetching JSON.,.");
    progress.setCancelable(false);
    progress.show();
}
protected Void doInBackground(Void...arg0){
    HTTP_Handler hh = new HTTP_Handler();
    String jString = hh.makeHTTPCall(url);

    if (jString != null) {
        try {
            JSONObject jObj = new JSONObject(jString);
            JSONArray books = jObj.getJSONArray("bookinfo");
            for (int i = 0; i < books.length(); i++) {
                JSONObject book = books.getJSONObject(i);

                String name=book.getString("name");
                String author=book.getString("author");


                HashMap<String, String> bookdata = new HashMap<>();


                bookdata.put("name", name);
                bookdata.put("author", author);


                booklist.add(bookdata);
            }
        } catch (final JSONException e) {

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Json parsing error: " + e.getMessage(),
                            Toast.LENGTH_LONG)
                            .show();
                }
            });
        }
    } else {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {Toast.makeText(getApplicationContext(),
                    "Couldn't get json from server. Check internet connection!",
                    Toast.LENGTH_LONG).show();
            }
        });
    }
    return null;
}
protected void onPostExecute(Void Result){
    super.onPostExecute(Result);
    if(progress.isShowing()){
        progress.dismiss();
    }
    ListAdapter adapter=new SimpleAdapter(
            HomeScreen.this,
            booklist,
            R.layout.bucket_list,
            new String[]{"name","author"},
            new int[]{R.id.list_Name,R.id.list_author);
    lv.setAdapter(adapter);
}
}
 }

【问题讨论】:

    标签: android json


    【解决方案1】:

    您的浏览器是否必须针对“website/filename.php”进行身份验证才能返回 JSON?我没有在您的代码中看到任何身份验证步骤。如果您的代码是免费提供的,那么这可能不是问题。乍一看,现在从服务器返回 JSON 似乎是个问题。

    【讨论】:

    • 不,没有身份验证
    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多