我想在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
的响应。
答案 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
}
}