无法调用对象的方法

时间:2018-05-09 22:30:31

标签: java android android-volley

确定。现在我将该翻译类移到单独的地方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 :(得分:-1)

  

我试图移动我将在课堂上使用的翻译方法。   但我只需要知道这条线路如何工作?   Volley.newRequestQueue(this);

这行代码假定调用是从活动内部进行的。在这种情况下,活动由this引用,Volley.newRequestQueue()作为参数传递给this

如果该行仅被复制并粘贴到其他非活动或上下文的类中,则它将无效,因为this将不会引用活动。

这种情况的解决方案是获取对正在运行的活动的引用,并将其作为参数而不是translation.translate("dfas", activity);传递。

要将Translation类放在Activity类之外,可以在方法中添加Context参数,并在使用时将活动与字符串一起传递。

您可以调用this,其中activity是运行翻译的活动(来自您将传递给它的活动本身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"); } } )。

<强> MainActivity.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);

    }

}

<强> AnotherClass.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;
    }
}

<强> Translation.java

from http.server import HTTPServer, BaseHTTPRequestHandler

class xxx(BaseHTTPRequestHandler):
    def do_GET(self):
        self.path = "/index.php"
        try:
            file_to_open = open(self.path).read()
            self.send_response(200)
        except:
            file_to_open = "File cannout found!"
            self.send_response(404)
    self.end_headers()
    self.wfile.write(bytes(file_to_open, "utf-8"))

httpd = HTTPServer(("localhost", 8080), xxx)
httpd.serve_forever()