Kotlin Volley-从其他班级访问排球时,应用程序崩溃并出现错误

时间:2019-03-07 14:48:43

标签: android kotlin android-volley

我在项目LoginActivity.ktApiActivity.kt中只有两个文件。腰部活动将调用ApiActivity内部的名为get()的函数,get()函数将仅执行简单的GET调用并返回值。

这是我在 LoginActivity.kt

中所拥有的
val api = com.sa.sa.ApiActivity();
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        this.getToken();
    }
private fun getToken() {
var response = this.api.get ();
        Toast.makeText(this@LoginActivity,  response, Toast.LENGTH_SHORT).show();
}

这就是我在 ApiActivity.kt

中所拥有的
fun get () : String {
        var result : String = "Test";
        val queue = Volley.newRequestQueue(this);
        var url = getString(R.string.api_url)+getString(R.string.api_getToken);
        val stringRequest = StringRequest(Request.Method.GET, url,
            Response.Listener<String> { response ->
                result = response;
            },
            Response.ErrorListener {
                result = "Error";
            })
        queue.add(stringRequest);
        return result;
    }

IDE不会显示任何错误,但是当我尝试运行应用程序时,它会显示以下错误并使应用程序崩溃

Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir()' on a null object reference

注意:ApiActivity.kt没有任何布局,我也没有onCreate。我已经发布了所有的代码。

应用程序崩溃的原因是什么或我做错了什么。

1 个答案:

答案 0 :(得分:2)

您根本不应该将ApiActivity设为一项活动。

class LoginActivity {
   fun getData(context : Context) : String {
    var result : String = "Test";
    val queue = Volley.newRequestQueue(context);
    var url = context.getString(R.string.api_url) + context.getString(R.string.api_getToken);
    val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String> { response ->
            result = response;
        },
        Response.ErrorListener {
            result = "Error";
        })
    queue.add(stringRequest);
    return result;
   } 
}

LoginActivity中将其称为

var response = this.api.getData(this);
Toast.makeText(this@LoginActivity,  response, Toast.LENGTH_SHORT).show();

StringRequest方法也不是异步的吗?在这种情况下,您将始终得到"Test"的回馈。