你好,在我的android Java项目中,我有两个类:一个是API witch,它位于本地的android模块库中,该库包含以下代码
package com.example.validationchecklib;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.Toast;
import android.app.Application;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class API extends Application{
public static int result;
public static int resultInApi;
public int checkSubscription(String packageName, String purchaseCode, RequestQueue q) {
String apiUrl = "https://package.evisions.tech/check_validation.php?package_name=" + packageName;
// creating a new variable for our request queue
//RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
// in this case the data we are getting is in the form
// of array so we are making a json array request.
// below is the line where we are making an json array
// request and then extracting data from each json object.
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, apiUrl, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
//creating a new Json object and getting each
//object from our json array.
try {
// we are getting each json object.
JSONObject responseObj = response.getJSONObject(i);
// now we get our response from API in json object format.
// in below line we are extracting a string with
// its key value from our json object.
// similarly we are extracting all the strings from our json object.
String apiPackage = responseObj.getString("package_name");
String apiPurchaseCode = responseObj.getString("purchase_code");
int apiStatus = responseObj.getInt("status");
if (apiStatus == 1) {
if (apiPackage.equalsIgnoreCase(packageName) && apiPurchaseCode.equalsIgnoreCase(purchaseCode)) {
//subcription status is valid and user inputed data matches with api data
result = 1;
System.out.println("Result in Api = "+result);
break;
}
} else if (apiStatus == 0) {
result = 0;
System.out.println("Result in Api = "+result);
break;
} else {
result = 2;
System.out.println("Result in Api = "+result);
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
result = 3;
System.out.println("Result in Api = Failed to get the data...");
}
});
q.add(jsonArrayRequest);
return result;
}
}
第二个类是主活动,我想从API类上的check Subsccription()方法中检索值,但即使来自volley的请求值为1,我也会得到0。
您可以使用以下url测试请求:https://package.evisions.tech/check_validation.php?package_name=aaaa
这是MainActivity的代码
package com.example.aaaa;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import com.example.validationchecklib.Subscription;
import com.example.validationchecklib.API;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
//Sample implementation of the Purchase validation android Library
public String packageName, purchaseCode;
public TextView txtPackageName, txtPurchaseCode;
public Button btnResult;
int serverResponse;
public String r;
private ArrayList<Subscription> subscriptionModalArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
subscriptionModalArrayList = new ArrayList<>();
txtPackageName = findViewById(R.id.edtPackageName);
txtPurchaseCode = findViewById(R.id.edtPurchaseCode);
btnResult = findViewById(R.id.btnVerify);
RequestQueue queue = Volley.newRequestQueue(this);
API api = new API();
btnResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
packageName = txtPackageName.getText().toString().trim();
purchaseCode = txtPurchaseCode.getText().toString().trim();
serverResponse = api.checkSubscription(packageName,purchaseCode, queue);
System.out.println("Result = "+serverResponse);
if(api.result == 1){
subscriptionModalArrayList.add(new Subscription(packageName,purchaseCode));
Intent intent = new Intent(MainActivity.this, ValidationResult.class);
startActivity(intent);
}
if(api.result == 0){
Toast.makeText(MainActivity.this, "Inactive Subscription", Toast.LENGTH_LONG).show();
System.exit(1);
}
if(serverResponse == 2 || serverResponse == 3){
Toast.makeText(MainActivity.this, "Failed to fetch data from API or other Error...", Toast.LENGTH_LONG).show();
System.exit(1);
}
txtPackageName.setText("");
txtPurchaseCode.setText("");
}
});
}
}
您发出的请求是异步的,您必须等待它的响应。
您看到的行为(总是返回零),因为结果变量尚未初始化,默认值为零。
public static int result;
您可以将回调传递给checkSubscription
方法,当您收到请求的结果(失败或成功)时,将调用该方法。
可以通过如下方式定义一个接口来实现:
public interface Callback {
public void onSuccess(int result);
public void onFailure(String error);
}
并让你的活动实现这个方法:
public class MainActivity extends AppCompatActivity implements Callback {
...
public void onSuccess(int result) {
//Your logic here
}
public void onFailure(String error) {
//Your logic here
}
}
并确保将活动传递给API:
public int checkSubscription(String packageName, String purchaseCode, RequestQueue q, Callback callback) {
.....
callback.onSuccess(result)
public void onErrorResponse(VolleyError error) {
result = 3;
System.out.println("Result in Api = Failed to get the data...");
callback.onError("YOUR_ERROR_MESSAGE");
}
}
免责声明:以上代码只是一个粗略的大纲,应该进行测试
我正在尝试从CSV文件导入数据。我对导入过程没有任何问题。但是,当我将一个导入的数组从CSV文件传递到另一个类中的另一个方法时,我无法从数组中获取和打印值。我得到了以下打印:[1,2.0,[[Ljava.lang.字符串;@1e81f4dc]。“1”和“2”是导入值,没有问题。 我真正的麻烦是获取并打印“[Ljava.lang.String;@1e81f4dc]”中的值。 如果您能帮助了解如何获取
我的主课有两个班(我们称它们为classA和classB)。 是否有机会在classB中设置classA变量? 诸如此类: 非常感谢!问候
当我在类中声明/初始化变量时(setter和getter)。如何从另一个类更改此值
我写了一个初始化脚本,设置用户环境变量,这些变量是经过哈希和加密的密钥...创建密钥后,不再需要密钥加密exe。我想启动主应用程序并删除包含哈希和密钥加密功能的init文件。 我没有任何问题与任何上述...当彼此独立时,一切都应该正常工作。问题是,为了让主应用程序能够访问新创建的环境变量,我需要init脚本完全退出... 我尝试过的每一件事,带旗帜的Popen,os。system()和其他人仍然让
我目前正在与tkinter一起完成一项学校作业,为用户创建一个图形用户界面以输入他们的输入。我决定将输入分成不同的页面,以避免用户被问题淹没,并且不需要滚动 每一页都有一系列标签和条目,在一个右除数和一个左除数上分开,我已经设法在每一页上实现了这一点,付出了一些努力。这是我工作代码的简化版本: 然而,在将每个页面拆分为两个不同的Frame()容器时,我遇到了两个问题: 用ipadx和ipady设置
我在class中定义了一个变量。它可以很好地执行Account类中定义的提款功能。但是,我希望访问Sav\u acct类中存在的函数interest中的变量值。它将收回的值取为0。如何使用兴趣函数中的函数中的函数的值,以便执行正确的数学运算? 导入java。util。扫描仪; 类别帐户{ 双重撤回; } 作废取款(){ 扫描仪sc=新扫描仪(系统英寸); 系统出来println(“您想提取多少?”