我正在使用'com.koushikdutta.async:androidasync:3.1.0'在我的安卓应用程序。我的代码如下:
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
import com.koushikdutta.async.http.AsyncHttpClient;
import com.koushikdutta.async.http.AsyncHttpPost;
import com.koushikdutta.async.http.AsyncHttpResponse;
import com.koushikdutta.async.http.body.MultipartFormDataBody;
import androidx.annotation.Nullable;
public class NetworkRequests{
ir.ghandban.Address address = new ir.ghandban.Address();//where we are gonna hold our network request addresses
String LoginRequestAnswer = "";
public String Login(final String phoneNumber, final String password, Context context) {
AsyncHttpPost post = new AsyncHttpPost(address.address("login"));
post.setTimeout(8000);
MultipartFormDataBody body = new MultipartFormDataBody();
body.addStringPart("phoneNumber", phoneNumber);
body.addStringPart("Pass", password);
post.setBody(body);
AsyncHttpClient.getDefaultInstance().executeString(post, new AsyncHttpClient.StringCallback() {
@Override
public void onCompleted(final Exception e, AsyncHttpResponse source, String result) {
if (e != null) {
LoginRequestAnswer = "Error";
}
if (result != null) {
switch (result) {
case "yes_user":
LoginRequestAnswer = "yes_user";
break;
case "no_user":
LoginRequestAnswer = "no_user";
break;
case "null":
LoginRequestAnswer = "null";
break;
}
}
}
});
return LoginRequestAnswer;
}
}
这是我如何使用它形成另一个活动
private void login(final String phoneNumber, final String password) {
avi.smoothToShow();
final SharedPreferences sp = getSharedPreferences("User", 0);
NetworkRequests networkRequests = new NetworkRequests();
switch (networkRequests.Login(phoneNumber, password, getApplicationContext())) {
case "Error":
avi.smoothToHide();
Snackbar snackbar = Snackbar.make(rel, "خطا در برقراری اتصال با سرور !", Snackbar.LENGTH_LONG);
View view = snackbar.getView();
view.setBackgroundColor(getResources().getColor(R.color.buttonBackground1));
snackbar.show();
//e.printStackTrace();
break;
case "yes_user":
avi.smoothToHide();
Snackbar snackbar2 = Snackbar.make(rel, "شما با موفقیت وارد حساب کاربری خود شدید !", Snackbar.LENGTH_LONG);
View view2 = snackbar2.getView();
view2.setBackgroundColor(getResources().getColor(R.color.buttonBackground1));
snackbar2.show();
SharedPreferences.Editor edit = sp.edit();
edit.putString("phoneNumber", phoneNumber);
edit.putString("Pass", password);
edit.apply();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("From", "LoginActivity");
startActivity(intent);
finish();
break;
case "no_user":
avi.smoothToHide();
Snackbar snackbar3 = Snackbar.make(rel, "نام کاربری و یا رمز عبور وارد شده اشتباه است!", Snackbar.LENGTH_LONG);
View view3 = snackbar3.getView();
view3.setBackgroundColor(getResources().getColor(R.color.buttonBackground1));
snackbar3.show();
break;
case "null":
avi.smoothToHide();
Snackbar snackbar4 = Snackbar.make(rel, "موارد ورودی شما خالی میباشد!", Snackbar.LENGTH_LONG);
View view4 = snackbar4.getView();
view4.setBackgroundColor(getResources().getColor(R.color.buttonBackground1));
snackbar4.show();
break;
case "":
avi.smoothToHide();
Snackbar snackbar5 = Snackbar.make(rel, "خالی", Snackbar.LENGTH_LONG);
View view5 = snackbar5.getView();
view5.setBackgroundColor(getResources().getColor(R.color.buttonBackground1));
snackbar5.show();
break;
}
}
始终获取最后一个case,即“"。我检查了请求,结果工作正常,但问题是LoginRequestAnswer在我返回时有它的第一个值,即“",我如何才能使它正确?
我试着创建另一个方法,它是一个void,可以保存所有与网络相关的代码,然后从公共String方法回调它......但是结果是一样的......
1条答案
按热度按时间xlpyo6sf1#
网络请求网络请求=新网络请求();
您编写了不可读的代码,因为您无法看到您试图创建一个活动。
对不起,您不应该使用new运算符来创建活动示例。
您只能使用Intent执行此操作。
您谈论的公共方法令人担忧..
那是...
String Login()
使其无效Login()。
该函数在触发onCompleted()之前返回。
最好添加一个接口或回调函数来处理onCompleted()的结果。