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

问题描述 投票:0回答:1

我是一个初学者,构建了一个使用在线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 并且我在清单中添加了互联网权限。

编辑:这里是.json。https:/github.comDeathVenom54bonerDictionaryDatabaseblobmasterdefinitions.json。

java android android-studio android-volley
1个回答
1
投票

你发布的json url是指向某人的github页面的链接,但不是json本身。最可能发生的情况是volley下载了包含json的整个HTML页面。然后它抱怨它的json格式不正确。

如果你想直接得到json,你需要找到一种方法把它存放在某个地方。例如github有一个api,你可以像这样访问json文件 https:/api.github.comusersmralexgrayrepos。

对于本地测试,你可以将它复制到本地的json文件中,然后导入到本机的 res/raw 的应用程序,并从那里引用它。

© www.soinside.com 2019 - 2024. All rights reserved.