如何在 Android Java 中发布 json 数据?

Posted

技术标签:

【中文标题】如何在 Android Java 中发布 json 数据?【英文标题】:How to post json data in Android Java? 【发布时间】:2021-09-17 15:39:38 【问题描述】:

我是 android Java 新手

我想将我的 Web 项目转换为 Android Java 应用程序并将本机项目反应。

对于网站,我使用 Jquery 和 ajax

$.ajax(
     url: "https://site/data.json",
     data: JSON.stringify(
        Name:  "Peter",
        Gender: "M"
             ),
        type: "POST",
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        success: function(returnData)
          
           ,
          error: function(xhr, ajaxOptions, thrownError)
             
            
         )

对于 React Native,我使用 fetch

//Work with React Native
    fetch('https://site/data.json', 
      
       method: 'POST',
       headers: 
       'Accept':       'application/json',
       'Content-Type': 'application/json',
       ,
       body: JSON.stringify( 
         Name:  "Peter",
         Gender: "M"
         )
       

但我不知道将其转换为 Android Java。有什么想法吗??

非常感谢

我尝试了以下代码,但对我不起作用。

public void sendPost() 
        Thread thread = new Thread(new Runnable() 
            @Override
            public void run() 
                try 
                    URL url = new URL("https://site/data.json");
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                    conn.setRequestProperty("Accept","application/json");
                    conn.setDoOutput(true);
                    conn.setDoInput(true);

                    JSONObject jsonParam = new JSONObject();
                    jsonParam.put("Name:", "Peter");
                    jsonParam.put("Gender:", "M");
                    Log.i("JSON", jsonParam.toString());
                    DataOutputStream os = new DataOutputStream(conn.getOutputStream());
                    os.writeBytes(jsonParam.toString());
                    os.flush();
                    os.close();

                    Log.i("STATUS", String.valueOf(conn.getResponseCode()));
                    Log.i("MSG" , conn.getResponseMessage());

                    conn.disconnect();
                 catch (Exception e) 
                    e.printStackTrace();
                
            
        );

   

【问题讨论】:

【参考方案1】:

使用 android 的网络库,你所做的是遗留的,不被鼓励。看看这个,两个都不错RetroFitVolley

【讨论】:

【参考方案2】:

您可以使用 volley 或 retrofit 库,下面是一个通过 retrofit 发送请求的简单示例。 1-将依赖项添加到您的 build.gradle:

   implementation 'com.google.code.gson:gson:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.squareup.okhttp3:okhttps:3.4.1'

2- 为发送数据制作模型:

public class Model 

@SerializedName("Name")
@Expose
private String name;

@SerializedName("Gender")
@Expose
private String gender;

public Model(String name, String gender) 
    this.name = name;
    this.gender = gender;
  


3- 创建建立连接的类

public class ApiClient 

private static Retrofit retrofit = null;
static Retrofit getClient() 

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
    retrofit = new Retrofit.Builder()
            .baseUrl("https://site/")   // your base url 
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
    return retrofit;
      
  

4- 添加接口用于处理对服务器的任何请求(获取或发布)

@POST("data")  // your url
@Headers("Content-Type: application/json")
Call<String>  PostData(@Body Model model);
/// Call<String>   depend for result response

5-将此添加到您的活动/片段中

   @Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main1111);

    sendPost();


private void sendPost() 

    ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);
    Call<String> call = apiInterface.PostData(simpleData());

    call.enqueue(new Callback<String>() 
        @Override
        public void onResponse(Call<String> call, Response<String> response) 
            if (response.isSuccessful()) 
                String result = response.body();   // this response depend for result in server (get  any response you must edit result type in call )
                Log.e("TAG", "onResponse: " + result);
                //response from server
            
        

        @Override
        public void onFailure(Call<String> call, Throwable t) 
            /// error response like disconnect to  server. failed to connect or etc....
        
    );



private Model simpleData() 
    Model model = new Model("Saman", "Male");
    return model;
    

这是从任何服务器请求和响应的最简单方法。

【讨论】:

以上是关于如何在 Android Java 中发布 json 数据?的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何使用json中提供的多个联系人数据在java中的android中添加新的电话联系人

如何在 Android JAVA 的列表视图中显示部分但不是全部 JSON 数据

如何使用 REST 将 Json 字符串发送到 android 参数中的 java webservice?

如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象

如何在Android中解析json字符串? [复制]

在java Android中获取JSON嵌套对象的特定索引