【问题标题】:How to parse data from json(url) and send data to url如何从 json(url) 解析数据并将数据发送到 url
【发布时间】:2019-10-21 14:56:37
【问题描述】:

我正在尝试将数据发送到解析 json 数据的 url,我想知道如果我们从 myjson.com 创建随机 json 存储,我们是否可以编辑 url 中的 json 数据,或者我们必须维护自己的服务器进行编辑json 数据。在这里我创建了随机 json 存储,我正在从该 url 解析数据,我还想编辑 url 中的数据,这是我无法做到的问题。它不工作。请帮忙??? 这是结构

[{"name":"pavan","hit":true}]

这是 fetchdata 在后台执行的主要活动代码

public class MainActivity extends AppCompatActivity {

    Button click;
    public static TextView data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        click=(Button)findViewById(R.id.button);
        data=(TextView)findViewById(R.id.fetcheddata);
        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                fetchdata process=new fetchdata();
                process.execute();
            }
        });


    }
}

这是 fetchdata 类,用于从 url 获取数据并显示在 mainactivity 的文本视图中

public class fetchdata extends AsyncTask<Void,Void,Void> {
    String data="";
    String dataparsed="";
    String singleparsed="";
    boolean flag=false;
    @Override
    protected Void doInBackground(Void... params) {

        try {
            URL url=new URL("https://api.myjson.com/bins/1854yb");
            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
            InputStream inputStream=httpURLConnection.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String line="";
            while (line!=null)
            {
                line=bufferedReader.readLine();
                data=data+line;
            }
            JSONArray JA=new JSONArray(data);
            for(int i=0;i<JA.length();i++)
            {
                JSONObject JO= (JSONObject) JA.get(i);
                singleparsed="Name:"+JO.get("name")+"\n"+"Feed key:"+JO.get("hit");
                dataparsed=dataparsed+singleparsed;
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        super.onPostExecute(result);
        MainActivity.data.setText(this.dataparsed);
        JSONObject postData = new JSONObject();
        try {
            postData.put("name","sai");
            postData.put("hit", false);

            new senddata().execute("https://api.myjson.com/bins/1854yb", postData.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }


    }
}

这是从正在执行的 fetchdata 的 postexecute 向 url 代码发送数据,并且 url 中没有发生任何事情,请帮助我从 3 天开始处理这个问题

public class senddata extends AsyncTask<String,Void, String> {

    String data="";
    String dataparsed="";
    String singleparsed="";
    boolean flag=false;

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

        String data = "";
        HttpURLConnection httpURLConnection = null;
        try {

            httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();
            httpURLConnection.setRequestMethod("POST");

            httpURLConnection.setDoOutput(true);

            DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
            wr.writeBytes("PostData=" + params[1]);
            wr.flush();
            wr.close();

            InputStream in = httpURLConnection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(in);

            int inputStreamData = inputStreamReader.read();
            while (inputStreamData != -1) {
                char current = (char) inputStreamData;
                inputStreamData = inputStreamReader.read();
                data += current;
            }
            dataparsed=data;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (httpURLConnection != null) {
                httpURLConnection.disconnect();
            }
        }

        return data;
    }
    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
        Log.e("TAG", result);



    }

}

【问题讨论】:

  • 为什么你对 fetchdata 和 senddata 使用相同的 api url?
  • 尝试检查 Postman 中的 senddata api。我得到 404 状态码,所以可能是后端有问题
  • 是的,我在 fetchdata(从 api 获取数据)和 senddata(在同一个 api 中编辑数据)中使用相同的 api,并且我们需要自己的服务器进行编辑

标签: java android json android-asynctask


【解决方案1】:

此 api 不接受其 url 后面的任何参数。 这是一个 get 方法 Api url 而不是 post 方法。尝试在 postman 的 post 方法中运行它,它会报错。 如果你在 get 方法中运行,它会产生相同的输出,即使你在 url 之后添加一些东西:-“https://api.myjson.com/bins/1854yb

【讨论】:

    【解决方案2】:

    我认为您在创建 api 时对 myJson 有一些问题。如果你是 android 的初学者,你也可以试试Link for ready made Api for Android

    他们创建了不同类型的 API 来理​​解 json 概念。

    还可以获取有关 PostMan Link for postman 的一些更新

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多