Не могу вызвать метод объекта - PullRequest
0 голосов
/ 10 мая 2018

Хорошо. Теперь я перемещаю этот класс Translation в отдельное место Translation.java. Но все же я не могу использовать это:

Translation translation = new Translation();
    translation.Translate("sadfas",);//this not work??

класс и метод являются публичными. Почему я не могу использовать это ???

Я очень новичок в Java и Android. У меня есть OcrCaptureActity. Внутри этого занятия у меня есть такой класс:

public class Translation {

    public String mytext;

    public String translate (String str) {

        RequestQueue queue = Volley.newRequestQueue( 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;
    }
}

В моем классе OcrGraphic у меня есть такое использование:

OcrCaptureActivity.Translation translation = new OcrCaptureActivity().new Translation();
translation.translate("dfas"); //that translate method not work. It s red.

Любая идея, в чем проблема. У меня есть только одна причина использовать класс Translate в действии, это то, что строка работает только в действии.

RequestQueue queue = Volley.newRequestQueue( getApplicationContext());//this only works inside activity 

В противном случае я не могу использовать что-то подобное в обычном классе:

RequestQueue queue = Volley.newRequestQueue( this);//it gives error

Так что, если вы можете помочь с тем, как я могу использовать метод перевода объекта перевода или как я могу инициализировать RequestQueue в каком-то другом классе, кроме деятельности Это будет очень полезно для меня.

1 Ответ

0 голосов
/ 10 мая 2018

Я пытался переместить этот метод перевода, где я буду использовать в классе. Но мне просто нужно знать, как эта линия может работать? 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;
    }
}
...