android 如何在返回字符串值的公共方法中使用AsyncHttpClient

lztngnrs  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(103)

我正在使用'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方法回调它......但是结果是一样的......

xlpyo6sf

xlpyo6sf1#

网络请求网络请求=新网络请求();
您编写了不可读的代码,因为您无法看到您试图创建一个活动。
对不起,您不应该使用new运算符来创建活动示例。
您只能使用Intent执行此操作。
您谈论的公共方法令人担忧..
那是...
String Login()
使其无效Login()。
该函数在触发onCompleted()之前返回。
最好添加一个接口或回调函数来处理onCompleted()的结果。

相关问题