我试图使用截取和发送GET请求,以检查数据后,登录。
我有特殊级别的'API‘,所有的截击人员都在那里。
我要做的是在检查LoginActivity (默认的android模板)中的验证之后,我想在LoginActivity中创建API实例并将GET请求发送到服务器。
这只是为了测试Volley,稍后我想在某个主类中创建一个API实例。
下面是我的API类:
import android.app.Application;
import android.util.Log;
import com.android.volley.*;
import com.android.volley.toolbox.Volley;
import com.android.volley.toolbox.JsonObjectRequest;
import org.json.JSONObject;
import java.lang.String;
public class API extends Application {
protected String ServerURL;
protected String GET;
protected String POST;
protected RequestQueue queue;
public API(){
setServerURL("http://localhost:63424");
setGET("http://localhost:63424/api");
setPOST("http://localhost:63424/api");
queue = Volley.newRequestQueue(this);
}
protected void SendGET (String request)
{
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, request, null,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
// display response
Log.d("ResponseAPI", response.toString());
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error.ResponseAPI", error.toString());
}
}
);
queue.add(getRequest);
}
//Logowanie
public boolean CheckLogin (String Login, String Password){
setGET(getGET()+"/Search_Users_/login=/"+Login + "/");
SendGET(getGET());
return true;
}
public String getServerURL() {
return ServerURL;
}
public void setServerURL(String ServerURL) {
ServerURL = ServerURL;
}
public String getGET() {
return GET;
}
public void setGET(String GET) {
this.GET = GET;
}
public String getPOST() {
return POST;
}
public void setPOST(String POST) {
this.POST = POST;
}
}在这里,我试图在LoginActivity中创建API实例:
public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
private final String mEmail;
private final String mPassword;
UserLoginTask(String email, String password) {
mEmail = email;
mPassword = password;
}
@Override
protected Boolean doInBackground(Void... params) {
// TODO: attempt authentication against a network service.
try {
// Simulate network access.
Thread.sleep(2000);
} catch (InterruptedException e) {
return false;
}
Log.d("API", "Zaraz utworze API");
API api = new API();
return api.CheckLogin(mEmail, mPassword);
// TODO: register the new account here.
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
finish();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled() {
mAuthTask = null;
showProgress(false);
}
}此解决方案不起作用,我得到一个错误:
FATAL EXCEPTION: AsyncTask #1
Process: pawel.cooker, PID: 2646
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:353)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir()' on a null object reference
at android.content.ContextWrapper.getCacheDir(ContextWrapper.java:256)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:43)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78)
at pawel.cooker.API.<init>(API.java:17)
at pawel.cooker.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:320)
at pawel.cooker.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:299)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764) 截击有问题,但不知道出了什么问题。
发布于 2017-09-11 03:56:05
截击有问题
不,API类有一个问题。
一定要把它放在舱单上
<application
android:name=".API"在那之后
onCreate。或,不要使用Application,并使用截击范围内的单例- 参见文档中的示例localhost
public class API extends Application {
public static final String ServerURL = "http://<Use real server here>:63424";
public static final String GET = ServerURL+"/api";
public static final String POST = ServerURL+"/api";
protected RequestQueue queue;
private final API mInstance;
private API() { }
public API getInstance() {
return mInstance;
}
@Override
public void onCreate(){
super.onCreate();
mInstance = this;
queue = Volley.newRequestQueue(this);
}return阻塞值。使用回调将结果传回
protected void sendGET (String url, Response.Listener<JSONObject> onSuccess)
{
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
onSuccess,
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error.ResponseAPI", error.toString());
}
}
);
queue.add(getRequest);
}
public void checkLogin (String Login, Response.Listener<JSONObject> onSuccess){
SendGET(GET+"/Search_Users_/login=/"+Login, onSuccess);
}new API()或上面的实现时不要使用((API) getApplicationContext()),API.getInstance()例如,
API api = API.getInstance();
api.checkLogin(mEmail, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO: register the new account here.
}
});在一个相关的注意事项上,如果您使用的是RESTful API,那么重新配置可能会更有用
https://stackoverflow.com/questions/46146000
复制相似问题