Android 从互联网访问 json 数据时出错

Android giving error while accessing json data from the internet

我是初学者,正在构建一个使用在线 API 的愚蠢应用程序。我将 .json 文件上传到 GitHub,我的应用程序从那里访问它并提供输出。但是,它始终运行 onErrorResponse 的语句。难道我做错了什么? 这是 MainActivity 的代码:

package com.example.jsonparsing;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DownloadManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

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

public class MainActivity extends AppCompatActivity {
    RequestQueue requestQueue;
    Button search;
    EditText input;
    TextView word;
    TextView meaning;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        search = findViewById(R.id.button_getMeaning);
        input = findViewById(R.id.editText_input);
        word = findViewById(R.id.textView_word);
        meaning = findViewById(R.id.textView_meaning);
        requestQueue = Volley.newRequestQueue(this);

        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String term = input.getText().toString().toLowerCase();
                String displayInput = term.toUpperCase() + ":";
                word.setText(displayInput);

                JsonObjectRequest jsonObjectRequest1 = new JsonObjectRequest(Request.Method.GET, "https://github.com/DeathVenom54/bonerDictionaryDatabase/blob/master/definitions.json", null,
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                try {
                                    String definition = response.getString(term);
                                    meaning.setText(definition);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                    meaning.setText("Sorry, this word doesn't exist in the boner database.");
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this, "Connection error, please check internet connection.", Toast.LENGTH_SHORT).show();
                    }
                });
                requestQueue.add(jsonObjectRequest1);
            }
        });




    }
}

该项目使用Volley并且我在清单中添加了Internet权限。

编辑:这是 .json : https://github.com/DeathVenom54/bonerDictionaryDatabase/blob/master/definitions.json

您发布的 json url 是 link 到某人 github 页面的 json,但不是 json本身。最有可能发生的情况是 volley 正在下载包含 json 的整个 HTML 页面。然后抱怨它的格式不正确 json.

如果您想要 json 直接,您需要找到一种方法将其托管在某个地方。例如 github 有一个 api,您可以像这样访问 json 个文件 https://api.github.com/users/mralexgray/repos

对于本地测试,您始终可以将其复制到本地 json 文件并导入到您应用的 res/raw 并从那里引用它。