java - 如何解决这个错误我被卡住了..我想创建登录页面
问题描述
我尝试在片段选项卡上使用 volley 创建登录页面,但我的 java 代码在 volley.newRequesQueue(this).add(request);
我是 android 新手,我不知道这个拖我后腿的错误是什么。我想将它连接到我的数据库。
错误说“无法将 Volley 中的 newRequestQueue(android.content.context) 应用于 (com.example.myandroidprac.loginpage)”下面是代码:-
package com.example.myandroidprac;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
enter code here
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.HashMap;
import java.util.Map;
/**
* A simple {@link Fragment} subclass.
我的java代码出现在下面
*/
public class loginpage extends Fragment {
Button btn_login;
EditText et_username, et_password;
public loginpage() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_loginpage, container, false);
btn_login = v.findViewById(R.id.btn_login);
et_username = v.findViewById(R.id.et_username);
et_password = v.findViewById(R.id.et_password);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
return v;
}
public void login(){
StringRequest request = new StringRequest(Request.Method.POST,
"http://10.183.52.242/loginapp/login.php",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(getContext(),"this is
response:"+response,Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
params.put("username","mwalulu");
params.put("password","coder");
return params;
}
};
Volley.newRequestQueue(this).add(request);
}
}
下面的 UI 布局代码解释了我在那边的情况
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/loginPage"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".loginpage"
android:paddingRight="10dp"
android:paddingLeft="10dp">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="casual"
android:text="@string/logex"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.555"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.023" />
<EditText
android:id="@+id/et_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:autofillHints="Enter Username"
android:ems="10"
android:hint="@string/user"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.555"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView2"
app:layout_constraintVertical_bias="0.116" />
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:autofillHints="Enter Password"
android:ems="10"
android:hint="@string/pass"
android:inputType="textPassword"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.555"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_username"
app:layout_constraintVertical_bias="0.065" />
<Button
android:id="@+id/btn_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/logbtn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.532"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_password"
app:layout_constraintVertical_bias="0.125" />
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案
因为您的类extends Fragment
不能this
作为参数传递给Volley.newRequestQueue()
函数。更改this
为getContext()
:
Volley.newRequestQueue(getContext()).add(request);
从Context 的Android文档中,如果您查看您找不到的直接和间接子类Fragment
。但是你会发现Activity
类和许多其他的。因此,您可以使用getActivity()
或更好getContext()
地获取对Context
.
因此,两种解决方案都是有效的:
Volley.newRequestQueue(getContext()).add(request);
Volley.newRequestQueue(getActivity()).add(request);
推荐阅读
- json - Golang 解组数组给出运行时错误:索引超出范围
- r - 根据 r 中的条件,用一组新的观察值替换特定的观察值
- sas - 如何将一个表的值作为 SAS Base 中另一个表的名称?
- angular - 在 FE 中使用 BE 提供的 Enum 是可能的,如何?
- sql - 找一个吃过苹果没吃过香蕉的人
- javascript - 在多轨设置中使用waveform.js 库在音频中寻找位置的问题
- python - pyqt在读取文件时没有响应
- html-email - 在 macOS/OSX 上查看 Mutt 邮件中的内联图像
- angular - 手动更新 Angular 版本
- makefile - 在字符串中进行变量替换