Я пытался переместить этот метод перевода, где я буду использовать в классе.
Но мне просто нужно знать, как эта линия может работать?
Volley.newRequestQueue (this);
В этой строке кода предполагается, что вызов выполняется изнутри действия. В этой ситуации на действие ссылается this
, который передается в качестве аргумента Volley.newRequestQueue()
.
Если строка просто скопирована и вставлена в другой класс, который не является Activity или Context, она не будет работать, так как this
не будет ссылаться на действие.
Решением для такой ситуации является получение ссылки на выполняемое действие и передача этого аргумента вместо this
.
Чтобы класс Translation находился за пределами класса Activity, вы можете добавить в метод параметр Context и передать действие вместе со строкой при его использовании.
Вы бы назвали translation.translate("dfas", activity);
, где действие - это действие, из которого выполняется перевод (из самого действия вы передадите его как this
).
MainActivity.java
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AnotherClass anotherClass = new AnotherClass(this); //this is the activity
anotherClass.runMeToTranslate("The text to be translated");
}
}
AnotherClass.java
/* Here we use the translation class */
public class AnotherClass{
Context context;
public AnotherClass(Context ctx){
this.context = ctx;
}
public runMeToTranslate(String text){
Translation translation = new Translation();
translation.translate(text,context);
}
}
Translation.java
public class Translation {
public String mytext;
public String translate (String str, final Context ctx){
RequestQueue queue = Volley.newRequestQueue( ctx.getApplicationContext());
String url ="someurl";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
//mTextView.setText("Response is: "+ response.substring(0,500));
mytext = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//mTextView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
return mytext;
}
}