Volley似乎不适用于Android SDK 29

时间:2019-07-05 07:31:05

标签: java android android-volley

我想在SDK版本29中使用Volley从我的其余API访问JSONobject,但是出现超时错误。

我之前在其他版本中尝试过相同的代码,然后它才能正常工作。

public class Login extends AppCompatActivity {

    String data = "";
    String url = "http://xyz/abc";
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        Button button=(Button) findViewById(R.id.lgn) ;
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // making json object request
                getObject();
            }
        });
        tv=(TextView) findViewById(R.id.txtResponse);

    }

    public void getObject(){
        RequestQueue queue = Volley.newRequestQueue(this);
        StringRequest strRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>()
                {
                    @Override
                    public void onResponse(String response)
                    {
                        Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String> params = new HashMap<String, String>();
                params.put("abc", "xyz");
                params.put("abc", "xyz");
                params.put("abc", "xyz");
                return params;
            }
        };

        queue.add(strRequest);
        //VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(req);
    }
}

我想在SDK版本29中使用凌空来获得JSONobject的响应。

3 个答案:

答案 0 :(得分:0)

这是一个POST,但您没有通过正文。像覆盖getBody()一样尝试覆盖getParams()方法。

类似的事情应该起作用

@Override
    public byte[] getBody() {
        String parsedBody = new String();
        try {
            parsedBody = parseBody(body); /* write a function to parse the body into a String */
            return parsedBody == null ? null : parsedBody.getBytes("utf-8");
        } catch (UnsupportedEncodingException uee) {
            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", parsedBody, "utf-8");
            return null;
        }
    }

答案 1 :(得分:0)

默认情况下,自Pie(SDK级别28)以来,HTTP被阻止。 请阅读此以获取更多信息。 https://android-developers.googleblog.com/2018/08/introducing-android-9-pie.html

请参阅此以获取解决方案。 How to allow all Network connection types HTTP and HTTPS in Android (9) Pie?

答案 2 :(得分:-1)

尝试在android标签中的 build.gradle 中添加此 compileOptions

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}