如何从json(url)解析数据并将数据发送到url

时间:2019-06-06 06:00:24

标签: java android json android-asynctask

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

  

[{“ name”:“ pavan”,“ hit”:true}]

这是mainactivity代码,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();
        }


    }
}

这是senddata到正在执行的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);



    }

}

2 个答案:

答案 0 :(得分:0)

此api的网址后不接受任何参数。 这是一个get方法,Api url不是post方法。尝试在postman的post方法中运行它,它将给出错误。 如果您在get方法中运行,即使您在url之后添加一些内容,也会产生相同的输出:-“ https://api.myjson.com/bins/1854yb

答案 1 :(得分:0)

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

他们创建了不同种类的Apis来理解json概念。

还获得有关PostMan Link for postman

的一些更新。